Compreender as referências é um elemento fundamental para usar Perl de forma eficaz. Como as referências são escalares, e os arrays e os hashes só podem conter escalares, as referências são essenciais para aninhar estas estruturas de dados.
Podes criar referências para variáveis e sub-rotinas existentes com o operador barra invertida \:
\$scalar para criar uma referência a um escalar (pode ser qualquer escalar, por exemplo \1, não apenas uma variável).\@array para criar uma referência a um array.\%hash para criar uma referência a um hash.\&sub para criar uma referência a código.Também podes criar o que se chama uma referência anónima para arrays, hashes e sub-rotinas:
['Alice', 'Bob', 'Charlie'] para criar uma referência anónima a um array.{foo => 'a', bar => 'b', baz => 'c'} para criar uma referência anónima a um hash.sub { return 1 } para criar uma referência anónima a código.AVISO: as chavetas em Perl podem ser ambíguas em certos contextos. Se não estiveres a obter a referência a um hash que esperas, acrescenta um sinal de mais à frente para desambiguar, por exemplo +{}. Consulta Chavetas para mais informações.
Podes aceder às referências com o operador seta ->:
$ref->[0] para aceder a um elemento dentro de uma referência a um array.$ref->{foo} para aceder a um valor dentro de uma referência a um hash.$ref->($arg) para chamar uma sub-rotina através de uma referência a código.Podes aceder a dados dentro de estruturas de dados complicadas, como arrays multidimensionais e hashes aninhados, encadeando subscritos, por exemplo $ref->{foo}[0]{bar} (o mesmo que $ref->{foo}->[0]->{bar}).
Se quiseres desreferenciar um array ou um hash completo, podes usar o operador seta seguido de @* ou %*, respetivamente, por exemplo $ref->@* ou $ref->%*.
Também podes obter fatias de uma referência a um array ou a um hash substituindo o * por um subscrito, por exemplo $ref->@[0..2] ou $ref->@{'Foo', 'Bar'}.
Nas fatias, a variação de sigilo aplica-se aqui da mesma forma que nas variáveis de array e de hash.