2. ¿Qué es un hash?
Estructura de datos que permite almacenar
un número indeterminado de datos indexados
por nombre.
Es como un array en el que sustituimos el
índice numérico por una cadena.
4. ¿Qué es un hash?
Supongamos que queremos almacenar la siguiente información
de un coche: marca, modelo, numero de puertas y potencia.
5. ¿Qué es un hash?
Supongamos que queremos almacenar la siguiente información
de un coche: marca, modelo, numero de puertas y potencia.
$coche[0]=‘ford’
$coche[1]=‘scort’
$coche[2]=5
$coche[3]=‘150cv’
6. ¿Qué es un hash?
Supongamos que queremos almacenar la siguiente información
de un coche: marca, modelo, numero de puertas y potencia.
$coche[0]=‘ford’
$coche[1]=‘scort’
$coche[2]=5
$coche[3]=‘150cv’
Problema: nos tenemos que acordar de qué significa cada
índice.
7. ¿Qué es un hash?
Supongamos que queremos almacenar la siguiente información
de un coche: marca, modelo, numero de puertas y potencia.
$coche[0]=‘ford’
$coche[1]=‘scort’
$coche[2]=5
$coche[3]=‘150cv’
Problema: nos tenemos que acordar de qué significa cada
índice.
Problema aún peor: si no lo documentamos, el programador
que tenga que revisar vuestro código dos años después no
creo que os tenga en muy buena estima.
8. ¿Qué es un hash?
Accediendo al elemento de un hash:
$coche{‘marca’} = ‘ford’
9. ¿Qué es un hash?
$ porque en un
elemento de un hash
almacenamos un escalar
clave valor
Accediendo al elemento de un hash:
$coche{‘marca’} = ‘ford’
identificador
(nombre del hash)
11. ¿Qué es un hash?
La clave puede ser una expresión perl:
12. ¿Qué es un hash?
La clave puede ser una expresión perl:
$coche{$variable}=‘ford’;
13. ¿Qué es un hash?
La clave puede ser una expresión perl:
$coche{$variable}=‘ford’;
$coche{ &obtenerClave };
14. ¿Qué es un hash?
La clave puede ser una expresión perl:
$coche{$variable}=‘ford’;
$coche{ &obtenerClave };
$coche{ $clave+‘_key’};
15. ¿Qué es un hash?
La clave puede ser una expresión perl:
$coche{$variable}=‘ford’;
$coche{ &obtenerClave };
$coche{ $clave+‘_key’};
Al hacer $coch{‘marca’} = ‘ford’
16. ¿Qué es un hash?
La clave puede ser una expresión perl:
$coche{$variable}=‘ford’;
$coche{ &obtenerClave };
$coche{ $clave+‘_key’};
Al hacer $coch{‘marca’} = ‘ford’
Si la clave no existe, se crea y se le asigna el valor ‘ford’
17. ¿Qué es un hash?
La clave puede ser una expresión perl:
$coche{$variable}=‘ford’;
$coche{ &obtenerClave };
$coche{ $clave+‘_key’};
Al hacer $coch{‘marca’} = ‘ford’
Si la clave no existe, se crea y se le asigna el valor ‘ford’
Si la clave ya existe, se sobreescribe el valor.
18. ¿Qué es un hash?
La clave puede ser una expresión perl:
$coche{$variable}=‘ford’;
$coche{ &obtenerClave };
$coche{ $clave+‘_key’};
Al hacer $coch{‘marca’} = ‘ford’
Si la clave no existe, se crea y se le asigna el valor ‘ford’
Si la clave ya existe, se sobreescribe el valor.
Si se recupera una clave que no existe, se obtiene undef.
19. Definiendo un hash
Para referirnos al hash completo utilizamos el
símbolo %, igual que para referirnos a un array
utilizábamos @
%choche
Podemos convertir un hash en una lista y una lista
en un hash:
1.%some_hash = ('foo', 35, 'bar', 12.4, 2.5, 'hola', 'wilma',
1.72e30, 'pedro', "adiosn");
20. Hash en contexto de
lista
Un hash en contexto de lista es una lista de
parejas clave valor
1. @coche = %coche
21. Hash en contexto de
lista
¿Qué hace la siguiente línea de código?
1.%coche_invertido = reverse %coche
22. “The Big Arrow”
Otra forma de inicializar los hashes en perl
1.my %coche = (
2. 'marca' => 'ford',
3. 'modelo' => ‘scort’,
4. 'puertas' => 5,
5. 'potencia' => '140cv',
6.);
23. Funciones
keys
Devuelve una lista con las claves de un
hash
values
Devuelve una lista con los valores de un
hash
24. Ejercicio
Escribir una función en perl (printHash) que
muestre por pantalla un hash con el siguiente
formato:
clave1 => valor1
clave2 => valor2
clave3 => valor3
25. Funciones
each
Esta función devuelve en cada llamada una
pareja clave/valor como una lista de dos
elementos
Con cada llamada, la función devuelve una
nueva pareja clave valor
Cuando termina (no quedan más elementos)
se devuelve una lista vacía
26. Funciones
each
while ( ($key, $value) = each %hash ) {
print "$key => $valuen";
}
27. Funciones
exists
Devuelve verdadero si la clave existe y
falso en caso contrario
if (exists $coche{"marca"}) {
print "Marca: $coche{‘marca’}n";
}
28. Funciones
delete
Elimina una clave del hash (y su
correspondiente valor)
Si la clave no existe, no da ni error ni
warning.
my $clave = "modelo";
delete $coche{$modelo};
29. El hash %ENV
Almacena las variables de entorno.
Escribir un script en perl que lo muestre por
pantalla.
Notas del editor
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
ver ejemplo hashes1.pl\n\nIndicar que el orden del array es el que más le convenga a perl internamente para almacenar el hash (y además lo hace de forma que no se pueda predecir para evitar posibles ataques)\n
ejecutar: hashes2.pl\n
Se pueden omitir las comillas de las claves siempre que estas consistan en letras, numeros y guiones bajos.\n
\n
ver printhash.pl\n
\n
EJERCICIO: repetir el ejercicio anterior pero con la función each. ver script printhash_each.pl\n\niteración 1: se asigna la primera pareja clave-valor a las variables $ke y $value.\nEl resultado de una asignación en ámbito escalar es el número de elementos que se asignan, en este caso 2. como dos es verdaderos (!=0) se ejecuta el cuerpo del bucle\niteraciones siguientes: se van asignando de esta forma hasta que se termina\ncuando no quedan más elementos para asignar, la asignación de lista en entorno escalar devuelve cero y se sale del buble. Las variables $key y $value valen undef. \n
\n
No es lo mismo borrar una clave que asignarle un valor undef. Ver script hashes3.pl\n