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} = 5En 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