Um hash é um conjunto de pares de valores-chave. Perl armazena elementos de um hash de forma que ele procura os valores com base em suas chaves. Variáveis ​​hash começam com um sinal '%'. 

Perl requer que as chaves de um hash sejam strings, enquanto os valores podem ser quaisquer escalares . Esses valores podem ser um número, string ou referência. Se valores não-string forem usados ​​como chaves, haverá um resultado inesperado. 

Uma chave hash deve ser exclusiva. Se um novo par de valores-chave for adicionado a um hash e essa chave existir, seu valor correspondente será sobrescrito. 

Criando Hashes

Existem muitas maneiras de inicializar uma variável hash, que são mostradas abaixo:

  • O valor é atribuído diretamente conforme mostrado abaixo e os dados são adicionados a um hash existente.
$stud{'Comp'} = 45;
$stud{'Inft'} = 42;
$stud{'Extc'} = 35;
  • Outra maneira é usar a lista que é convertida em hash pegando pares individuais. O primeiro elemento do par é usado como a chave e o segundo como o valor.
%stud = ('Comp', 45, 'Inft', 42, 'Extc', 35);
  • Uma maneira é usar => para indicar os pares chave / valor conforme mostrado abaixo:
%stud = ('Comp' => 45, 'Inft' => 42, 'Extc' => 35);
  • Outra maneira de fazer a mesma coisa é a mostrada abaixo. Aqui, todas as chaves são precedidas por hífen (-) e, portanto, nenhuma aspa é exigida em torno delas. O hash pode ser criado usando este método apenas se não houver espaços na palavra.
%stud = (-Comp => 45, -Inft => 42, -Extc => 35);
Acessando Hash Elements

Para acessar o elemento individual do hash, a variável é prefixada com um cifrão ($) e, a seguir, acrescenta a chave do elemento entre chaves após o nome da variável. 

O exemplo a seguir ilustra todos os métodos de criação de hash, conforme explicado acima: 

Exemplo :  

#!/usr/bin/perl
 
# Initializing Hash1 by
# directly assigning values
$stud1{'Comp'} = 10;
$stud1{'Inft'} = 20;
$stud1{'Extc'} = 30;
 
# printing elements of stud
print "Printing values of Hash1\n";
print "$stud1{'Comp'}\n";
print "$stud1{'Inft'}\n";
print "$stud1{'Extc'}\n";
 
# Initializing Hash2 by taking
# individual pairs
%stud2 = ('Comp', 15, 'Inft', 18, 'Extc', 22);
 
# Extracting values using keys
print "\nPrinting values of Hash2\n";
print "computer = $stud2{'Comp'}";
print "\ninft = $stud2{Inft}";
print "\nextc = $stud2{'Extc'}\n";
 
 
# Initializing Hash3 using '=>'
%stud3 = ('Comp' => 45, 'Inft' => 42, 'Extc' => 35);
 
# printing elements of stud3
print "\nPrinting values of Hash3\n";
print "$stud3{'Comp'}\n";
print "$stud3{'Inft'}\n";
print "$stud3{'Extc'}\n";
 
# Initializing Hash4 using hyphen(-)
%stud4 = (-Comp => 5, -Inft => 15, -Extc => 25);
 
# Printing elements of stud4
print "\nPrinting values of Hash4\n";
print "$stud4{'-Comp'}\n";
print "$stud4{'-Inft'}\n";
print "$stud4{'-Extc'}";
Saída: 
Imprimindo valores de Hash1
10
20
30

Imprimindo valores de Hash2
computador = 15
inft = 18
extc = 22

Imprimindo valores de Hash3
45
42
35

Imprimindo valores de Hash4
5
15
25

 

Extraindo chaves e valores

Às vezes, é necessário extrair chaves e valores de um hash para realizar várias operações nele. Operações como modificação, exclusão, adição de elementos, etc. O hash permite extrair essas chaves e valores com o uso de funções embutidas. 
Obter uma lista de todas as chaves de um hash pode ser feito usando a função keys .

Sintaxe: keys% HASH 
Retorna um array de todas as chaves presentes no HASH

Exemplo:  

# Initializing Hash with Key-Value pairs
%stud = ('Comp' => 45, 'Inft' => 42, 'Extc' => 35);
 
# Extracting keys from hash
@Key_array = keys %stud;
 
# Printing the extracted keys
print "Keys are :\n";
print "$Key_array[0]\n";
print "$Key_array[1]\n";
print "$Key_array[2]\n";

Saída: 

Keys are :
Comp
Extc
Inft

Da mesma forma, a função de valores é usada para obter uma lista de todos os valores.  

Sintaxe: valores% HASH 
Retorna uma array com todos os valores de HASH

Exemplo:  

# Initializing Hash with Key-Value pairs
%stud = ('Comp' => 45, 'Inft' => 42, 'Extc' => 35);
 
# Extracting values from hash
@value_array = values %stud;
 
# Printing the extracted values
print "Values are :\n";
print "$value_array[0]\n";
print "$value_array[1]\n";
print "$value_array[2]\n";
Saída: 
Os valores são:
45
35
42