Es posible crear hash
es multinivel
anidando referencias a hashes anónimos:
$behaviour = { cat => { nap => "lap", eat=>"meat"}, dog => { prowl => "growl", pool=>"drool"}, mouse => { nibble=>"kibble"} };
Para acceder a los datos se requiere una cadena de flechas:
print "A cat eats ",$behaviour->{cat}->{eat},"\n";
Al igual que para los array
s multidimensionales, las flechas
después de la primera pueden ser suprimidas:
print "A mouse nibbles ",$behaviour->{mouse}{nibble},"\n";
En general las secuencias ]->{
, }->[
, etc. pueden ser abreviadas
omitiendo la flecha: ]{
, }[
, etc.
En caso de ambiguedad es necesario prefijar la llave o el corchete de un símbolo +
o de un return
:
DB<1> sub hashem { { @_ } } DB<2> @a = hashem(a => 1, b => 2) DB<3> x @a 0 'a' 1 1 2 'b' 3 2 DB<4> sub hashem { +{ @_ } } DB<5> @a = hashem(a => 1, b => 2) DB<6> x @a 0 HASH(0x100a28120) 'a' => 1 'b' => 2 DB<8> sub hashem { return { @_ } } DB<9> @a = hashem(a => 1, b => 2) DB<10> x @a 0 HASH(0x100a290c0) 'a' => 1 'b' => 2Si se pone
{;
se deshace la ambiguedad
en favor de la interpretación como bloque de código:
DB<12> sub hashem { {; @_ } } DB<13> @a = hashem(a => 1, b => 2) DB<14> x @a 0 'a' 1 1 2 'b' 3 2
Casiano Rodríguez León