pp2@nereida:~/LGRID_Machine$ perl -wde 0
main::(-e:1): 0
DB<1> use Hash::Util qw(lock_keys unlock_keys lock_value unlock_value lock_hash unlock_hash hash_seed)
DB<2> %h = (foo => 42, bar => 23)
DB<3> lock_keys(%h)
DB<4> x %h
0 'bar'
1 23
2 'foo'
3 42
DB<5> $h{chum} = 32
Attempt to access disallowed key 'chum' in a restricted hash at (eval 9)[/usr/share/perl/5.8/perl5db.pl:628] line 2.
La llamada a lock_keys bloque las claves. Sin embargo es posible suprimir claves
existentes:
DB<6> delete($h{foo})
DB<7> x %h
0 'bar'
1 23
DB<8> $h{foo} = 5
En el momento del bloqueo es posible especificar que claves se bloquean:
DB<9> %t = (a => 1, b => 2)
DB<10> lock_keys(%t, keys(%t), qw{c d e})
DB<11> @t{qw{c d e}} = 1..3
DB<12> x %t
0 'e'
1 3
2 'c'
3 1
4 'a'
5 1
6 'b'
7 2
8 'd'
9 2
DB<13> $t{x} = 4
Attempt to access disallowed key 'x' in a restricted hash at (eval 17)[/usr/share/perl/5.8/perl5db.pl:628] line 2.
Es posible liberar el bloqueo sobre una clave mediante unlock_keys :
DB<14> unlock_keys(%t)
DB<15> $t{x} = 4
DB<16> x %t
0 'e'
1 3
2 'c'
3 1
4 'a'
5 1
6 'b'
7 2
8 'x'
9 4
10 'd'
11 2
Es posible bloquear los valores de un hash cuyas claves hayan sido bloqueadas:
DB<17> %d = qw{one 1 two 2 three 3}
DB<18> lock_keys(%d)
DB<19> lock_value(%d, 'two')
DB<20> $d{one} = 4
DB<21> $d{two} = 3
Modification of a read-only value attempted at (eval 35)[/usr/share/perl/5.8/perl5db.pl:628] line 2.
Casiano Rodríguez León
