Entender las referencias es un elemento fundamental para usar Perl de manera efectiva. Como las referencias son escalares, y los arrays y los hashes solo pueden contener escalares, las referencias son clave para anidar estas estructuras de datos.
Se pueden crear referencias para variables y subrutinas existentes usando el operador de barra invertida \:
\$scalar para crear una referencia a un escalar (esto puede ser cualquier escalar, p. ej., \1, no solo una variable).\@array para crear una referencia a un array.\%hash para crear una referencia a un hash.\&sub para crear una referencia a código.También puedes crear lo que se conoce como una referencia anónima para arrays, hashes y subrutinas:
['Alice', 'Bob', 'Charlie'] para crear una referencia anónima a un array.{foo => 'a', bar => 'b', baz => 'c'} para crear una referencia anónima a un hash.sub { return 1 } para crear una referencia anónima a código.ADVERTENCIA: Las llaves en Perl pueden ser ambiguas en ciertos contextos. Si no obtienes la referencia a hash que esperas, agrega un signo más al principio para desambiguarla, p. ej., +{}. Consulta Llaves para más información.
Se puede acceder a las referencias usando el operador de flecha ->:
$ref->[0] para acceder a un elemento dentro de una referencia a un array.$ref->{foo} para acceder a un valor dentro de una referencia a un hash.$ref->($arg) para llamar a una subrutina a través de una referencia a código.Se puede acceder a los datos dentro de estructuras de datos complicadas, como arrays multidimensionales y hashes anidados, encadenando subíndices, p. ej., $ref->{foo}[0]{bar} (lo mismo que $ref->{foo}->[0]->{bar}).
Si quieres desreferenciar un array o un hash completos, puedes usar el operador de flecha seguido de @* o %*, respectivamente, p. ej., $ref->@* o $ref->%*.
También puedes obtener rebanadas de una referencia a un array o a un hash reemplazando el * con un subíndice, p. ej., $ref->@[0..2] o $ref->@{'Foo', 'Bar'}.
Para las rebanadas, la variación de sigilos se aplica aquí de la misma manera que con las variables de array y de hash.