Entender las referencias es un elemento fundamental para usar Perl con eficacia. 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 a variables y subrutinas existentes usando el operador de barra invertida \:
\$scalar para crear una referencia a un escalar (puede ser cualquier escalar, por ejemplo \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, añade un signo más al principio para desambiguarla, por ejemplo +{}. Consulta las 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, por ejemplo $ref->{foo}[0]{bar} (lo mismo que $ref->{foo}->[0]->{bar}).
Si quieres desreferenciar un array o un hash completo, puedes usar el operador de flecha seguido de @* o %* respectivamente, por ejemplo $ref->@* o $ref->%*.
También puedes obtener porciones de una referencia a array o a hash sustituyendo el * por un subíndice, por ejemplo $ref->@[0..2] o $ref->@{'Foo', 'Bar'}.
En el caso de las porciones, aquí se aplica la varianza de sigilos de la misma forma que con las variables de array y de hash.