Es posible crear hashes 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 arrays 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' => 2
Si 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
