Hashes Anidados

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
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19