Perl - Hashs

Un hachage est un ensemble de key/valuepaires. Les variables de hachage sont précédées d'un signe de pourcentage (%). Pour faire référence à un élément unique d'un hachage, vous utiliserez le nom de la variable de hachage précédé d'un signe «$» et suivi de la «clé» associée à la valeur entre accolades.

Voici un exemple simple d'utilisation des variables de hachage -

#!/usr/bin/perl

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

print "\$data{'John Paul'} = $data{'John Paul'}\n";
print "\$data{'Lisa'} = $data{'Lisa'}\n";
print "\$data{'Kumar'} = $data{'Kumar'}\n";

Cela produira le résultat suivant -

$data{'John Paul'} = 45
$data{'Lisa'} = 30
$data{'Kumar'} = 40

Créer des hachages

Les hachages sont créés de l'une des deux manières suivantes. Dans la première méthode, vous attribuez une valeur à une clé nommée sur une base un par un -

$data{'John Paul'} = 45;
$data{'Lisa'} = 30;
$data{'Kumar'} = 40;

Dans le second cas, vous utilisez une liste, qui est convertie en prenant des paires individuelles de la liste: le premier élément de la paire est utilisé comme clé, et le second, comme valeur. Par exemple -

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

Pour plus de clarté, vous pouvez utiliser => comme alias pour, pour indiquer les paires clé / valeur comme suit -

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

Voici une autre variante du formulaire ci-dessus, regardez-la, ici toutes les clés ont été précédées d'un tiret (-) et aucune citation n'est requise autour d'elles -

%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

Mais il est important de noter qu'il n'y a qu'un seul mot, c'est-à-dire que les clés sans espaces ont été utilisées dans cette forme de formation de hachage et si vous construisez votre hachage de cette façon, les clés seront accessibles en utilisant un trait d'union uniquement comme indiqué ci-dessous.

$val = %data{-JohnPaul}
$val = %data{-Lisa}

Accéder aux éléments de hachage

Lors de l'accès à des éléments individuels à partir d'un hachage, vous devez faire précéder la variable d'un signe dollar ($), puis ajouter la clé d'élément entre accolades après le nom de la variable. Par exemple -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

print "$data{'John Paul'}\n";
print "$data{'Lisa'}\n";
print "$data{'Kumar'}\n";

Cela produira le résultat suivant -

45
30
40

Extraction de tranches

Vous pouvez extraire des tranches d'un hachage tout comme vous pouvez extraire des tranches d'un tableau. Vous devrez utiliser le préfixe @ pour que la variable stocke la valeur renvoyée car ce sera une liste de valeurs -

#!/uer/bin/perl


%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

@array = @data{-JohnPaul, -Lisa};

print "Array : @array\n";

Cela produira le résultat suivant -

Array : 45 30

Extraction de clés et de valeurs

Vous pouvez obtenir une liste de toutes les clés d'un hachage en utilisant keys fonction, qui a la syntaxe suivante -

keys %HASH

Cette fonction renvoie un tableau de toutes les clés du hachage nommé. Voici l'exemple -

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@names = keys %data;

print "$names[0]\n";
print "$names[1]\n";
print "$names[2]\n";

Cela produira le résultat suivant -

Lisa
John Paul
Kumar

De même, vous pouvez utiliser valuesfonction pour obtenir une liste de toutes les valeurs. Cette fonction a la syntaxe suivante -

values %HASH

Cette fonction renvoie un tableau normal composé de toutes les valeurs du hachage nommé. Voici l'exemple -

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@ages = values %data;

print "$ages[0]\n";
print "$ages[1]\n";
print "$ages[2]\n";

Cela produira le résultat suivant -

30
45
40

Vérification de l'existence

Si vous essayez d'accéder à une paire clé / valeur à partir d'un hachage qui n'existe pas, vous obtiendrez normalement le undefinedvalue, et si vous avez activé les avertissements, vous recevrez un avertissement généré au moment de l'exécution. Vous pouvez contourner ce problème en utilisant leexists fonction, qui renvoie true si la clé nommée existe, quelle que soit sa valeur -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

if( exists($data{'Lisa'} ) ) {
   print "Lisa is $data{'Lisa'} years old\n";
} else {
   print "I don't know age of Lisa\n";
}

Ici, nous avons introduit l'instruction IF ... ELSE, que nous étudierons dans un chapitre séparé. Pour l'instant tu supposes juste queif( condition ) partie ne sera exécutée que lorsque la condition donnée est vraie sinon elseune partie sera exécutée. Ainsi, lorsque nous exécutons le programme ci-dessus, il produit le résultat suivant car ici la condition donnée existe ($ data {'Lisa'} renvoie true -

Lisa is 30 years old

Obtenir la taille du hachage

Vous pouvez obtenir la taille, c'est-à-dire le nombre d'éléments à partir d'un hachage en utilisant le contexte scalaire sur des clés ou des valeurs. En disant simplement que vous devez d'abord obtenir un tableau des clés ou des valeurs, vous pouvez ensuite obtenir la taille du tableau comme suit -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@keys = keys %data;
$size = @keys;
print "1 - Hash size:  is $size\n";

@values = values %data;
$size = @values;
print "2 - Hash size:  is $size\n";

Cela produira le résultat suivant -

1 - Hash size: is 3
2 - Hash size: is 3

Ajouter et supprimer des éléments dans les hachages

L'ajout d'une nouvelle paire clé / valeur peut être effectué avec une ligne de code à l'aide d'un opérateur d'affectation simple. Mais pour supprimer un élément du hachage, vous devez utiliserdelete fonction comme indiqué ci-dessous dans l'exemple -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@keys = keys %data;
$size = @keys;
print "1 - Hash size:  is $size\n";

# adding an element to the hash;
$data{'Ali'} = 55;
@keys = keys %data;
$size = @keys;
print "2 - Hash size:  is $size\n";

# delete the same element from the hash;
delete $data{'Ali'};
@keys = keys %data;
$size = @keys;
print "3 - Hash size:  is $size\n";

Cela produira le résultat suivant -

1 - Hash size: is 3
2 - Hash size: is 4
3 - Hash size: is 3