Em Perl, usamos variáveis ​​para acessar dados armazenados em um local da memória (todos os dados e funções são armazenados na memória). Variáveis ​​são atribuídas com valores de dados que são usados ​​em várias operações. Referência Perl é uma forma de acessar os mesmos dados, mas com uma variável diferente. Uma referência em Perl é um tipo de dado escalar que contém a localização de outra variável. Outra variável pode ser escalar, hashes, arrays, nome da função, etc. A estrutura de dados aninhada pode ser criada facilmente, pois um usuário pode criar uma lista que contém as referências a outra lista que pode conter ainda as referências a arrays, escalares ou hashes etc.

Criação de Referência

Você pode criar referências para valor escalar , hash, array, função, etc. Para criar uma referência, defina uma nova variável escalar e atribua a ela o nome da variável (cuja referência você deseja criar) prefixando-a com uma barra invertida.

Exemplos: Fazendo referências de diferentes tipos de dados:

# Array Reference

# defining array 
@array = ('1', '2', '3');

# making reference of array variable  
$reference_array = \@array;  

# Hash Reference

# defining hash
%hash = ('1'=>'a', '2'=>'b', '3'=>'c'); 

# make reference of the hash variable
$reference_hash = \%hash;   

# Scalar Value Reference

# defining scalar
$scalar_val = 1234;
 
# making reference of scalar variable
$reference_scalar = \$scalar_val; 

Observação:

  • Uma referência a um hash anônimo pode ser criada usando as chaves {} ao redor dos pares de chave e valor.

    Exemplo:

    # criando referência para hash anônimo
    $ref_to_anonymous_hash = {'GFG' => '1', 'Geeks' => '2'};
    
  • Uma referência a uma array anônima pode ser criada usando os colchetes [] .

    Exemplo:

    # criando referência a uma array anônima
    $ref_to_anonymous_array = [20, 30, ['G', 'F', 'G']];
    
  • Uma referência a uma sub-rotina anônima também pode ser criada com a ajuda de sub . Aqui não haverá nome para o sub .

    Exemplo:

    # criando referência a uma sub-rotina anônima
    $ref_to_anonymous_subroutine = sub {print "GeeksforGeeks \ n"};
    
  • Uma referência a um identificador de entrada / saída, ou seja, dirhandle e filehandle não pode ser criada.

Desreferenciamento

Agora, depois de fazer a referência, precisamos usá-la para acessar o valor. A desreferenciação é a forma de acessar o valor da memória apontado pela referência. Para desreferenciar, usamos o prefixo $, @,% ou & dependendo do tipo da variável (uma referência pode apontar para um array, escalar ou hash etc).

Exemplo 1:

# Perl program to illustrate the 
# Dereferencing of an Array
  
# defining an array
@array = ('1', '2', '3');  
  
# making an reference to an array variable
$reference_array = \@array;  
  
# Dereferencing
# printing the value stored 
# at $reference_array by prefixing 
# @ as it is a array reference
print @$reference_array;    
Saída:
123

Exemplo 2:

# Perl program to illustrate the 
# Dereferencing of a Hash
  
# defining hash
%hash = ('1'=>'a', '2'=>'b', '3'=>'c');
  
# creating an reference to hash variable
$reference_hash = \%hash;   
  
# Dereferencing
# printing the value stored 
# at $reference_hash by prefixing 
# % as it is a hash reference
print %$reference_hash;  
Saída:
3c2b1a

Exemplo 3:

# Perl program to illustrate the 
# Dereferencing of a Scalar
  
# defining a scalar
$scalar = 1234;
  
# creating an reference to scalar variable 
$reference_scalar = \$scalar; 
  
# Dereferencing
# printing the value stored 
# at $reference_scalar by prefixing 
# $ as it is a Scalar reference
print $$reference_scalar;  
Saída:
1234