Perl - Hashes
Un hash es un conjunto de key/valuepares. Las variables hash están precedidas por un signo de porcentaje (%). Para hacer referencia a un solo elemento de un hash, utilizará el nombre de la variable hash precedido por un signo "$" y seguido de la "clave" asociada con el valor entre llaves.
Aquí hay un ejemplo simple de cómo usar las variables hash:
#!/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";
Esto producirá el siguiente resultado:
$data{'John Paul'} = 45
$data{'Lisa'} = 30
$data{'Kumar'} = 40
Creando hashes
Los hash se crean de una de las dos formas siguientes. En el primer método, asigna un valor a una clave nombrada uno por uno:
$data{'John Paul'} = 45;
$data{'Lisa'} = 30;
$data{'Kumar'} = 40;
En el segundo caso, usa una lista, que se convierte tomando pares individuales de la lista: el primer elemento del par se usa como clave y el segundo como valor. Por ejemplo
%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);
Para mayor claridad, puede usar => como un alias para, para indicar los pares clave / valor de la siguiente manera:
%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
Aquí hay una variante más del formulario anterior, échale un vistazo, aquí todas las claves han sido precedidas por un guión (-) y no se requieren citas alrededor de ellas -
%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);
Pero es importante tener en cuenta que hay una sola palabra, es decir, sin espacios, las claves se han usado en esta forma de formación de hash y si construye su hash de esta manera, se accederá a las claves usando guiones solo como se muestra a continuación.
$val = %data{-JohnPaul}
$val = %data{-Lisa}
Acceder a elementos hash
Al acceder a elementos individuales desde un hash, debe anteponer la variable con un signo de dólar ($) y luego agregar la clave del elemento entre corchetes después del nombre de la variable. Por ejemplo
#!/usr/bin/perl
%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
print "$data{'John Paul'}\n";
print "$data{'Lisa'}\n";
print "$data{'Kumar'}\n";
Esto producirá el siguiente resultado:
45
30
40
Extrayendo rodajas
Puede extraer porciones de un hash del mismo modo que puede extraer porciones de una matriz. Deberá usar el prefijo @ para que la variable almacene el valor devuelto porque será una lista de valores:
#!/uer/bin/perl
%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);
@array = @data{-JohnPaul, -Lisa};
print "Array : @array\n";
Esto producirá el siguiente resultado:
Array : 45 30
Extraer claves y valores
Puede obtener una lista de todas las claves de un hash utilizando keys función, que tiene la siguiente sintaxis:
keys %HASH
Esta función devuelve una matriz de todas las claves del hash nombrado. A continuación se muestra el ejemplo:
#!/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";
Esto producirá el siguiente resultado:
Lisa
John Paul
Kumar
Del mismo modo, puede utilizar valuesfunción para obtener una lista de todos los valores. Esta función tiene la siguiente sintaxis:
values %HASH
Esta función devuelve una matriz normal que consta de todos los valores del hash nombrado. A continuación se muestra el ejemplo:
#!/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";
Esto producirá el siguiente resultado:
30
45
40
Comprobación de existencia
Si intenta acceder a un par clave / valor desde un hash que no existe, normalmente obtendrá el undefinedvalor, y si tiene las advertencias activadas, obtendrá una advertencia generada en tiempo de ejecución. Puede solucionar esto utilizando elexists función, que devuelve verdadero si existe la clave nombrada, independientemente de cuál pueda ser su valor -
#!/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";
}
Aquí hemos introducido la declaración IF ... ELSE, que estudiaremos en un capítulo aparte. Por ahora solo asumes queif( condition ) parte se ejecutará solo cuando la condición dada sea verdadera de lo contrario elseparte se ejecutará. Entonces, cuando ejecutamos el programa anterior, produce el siguiente resultado porque aquí existe la condición dada ($ data {'Lisa'} devuelve verdadero -
Lisa is 30 years old
Obtener tamaño de hash
Puede obtener el tamaño, es decir, la cantidad de elementos de un hash utilizando el contexto escalar en claves o valores. Simplemente diciendo que primero debe obtener una matriz de las claves o valores y luego puede obtener el tamaño de la matriz de la siguiente manera:
#!/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";
Esto producirá el siguiente resultado:
1 - Hash size: is 3
2 - Hash size: is 3
Agregar y quitar elementos en hashes
Se puede agregar un nuevo par clave / valor con una línea de código usando un operador de asignación simple. Pero para eliminar un elemento del hash, debe usardelete funciona como se muestra a continuación en el ejemplo -
#!/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";
Esto producirá el siguiente resultado:
1 - Hash size: is 3
2 - Hash size: is 4
3 - Hash size: is 3