Entender referências é um elemento fundamental para usar Perl de forma eficaz. Como referências são escalares, e arrays e hashes só podem conter escalares, as referências são essenciais para aninhar essas estruturas de dados.
Referências podem ser criadas para variáveis e sub-rotinas existentes usando o operador de barra invertida \:
\$scalar para criar uma referência para um escalar (pode ser qualquer escalar, por exemplo, \1, não só uma variável).\@array para criar uma referência para um array.\%hash para criar uma referência para um hash.\&sub para criar uma referência para código.Você também pode criar o que se chama de referência anônima para arrays, hashes e sub-rotinas:
['Alice', 'Bob', 'Charlie'] para criar uma referência anônima para um array.{foo => 'a', bar => 'b', baz => 'c'} para criar uma referência anônima para um hash.sub { return 1 } para criar uma referência anônima para código.AVISO: as chaves em Perl podem ser ambíguas em certos contextos. Se você não está obtendo a referência de hash que esperava, adicione um sinal de mais no início para desambiguar, por exemplo, +{}. Consulte Chaves para mais informações.
É possível acessar referências usando o operador seta ->:
$ref->[0] para acessar um elemento dentro de uma referência para array.$ref->{foo} para acessar um valor dentro de uma referência para hash.$ref->($arg) para chamar uma sub-rotina por meio de uma referência para código.Dados dentro de estruturas de dados complicadas, como arrays multidimensionais e hashes aninhados, podem ser acessados encadeando subscritos, por exemplo, $ref->{foo}[0]{bar} (o mesmo que $ref->{foo}->[0]->{bar}).
Se você quiser desreferenciar um array ou hash inteiro, pode usar o operador seta seguido de @* ou %*, respectivamente, por exemplo, $ref->@* ou $ref->%*.
Você também pode obter fatias de uma referência para array ou hash substituindo o * por um subscrito, por exemplo, $ref->@[0..2] ou $ref->@{'Foo', 'Bar'}.
Para fatias, a variação de sigil se aplica aqui da mesma forma que se aplica a variáveis de array e de hash.