Que son los hashes?
Los hashes o también llamados hash como se describe %hash son variables de arreglo asociativo,esto quiere decir que asocia los valores que se encuentren dentro del hash con un valor y salida y retorna la salida
Si han visto los ejemplos de programas que he escrito en perl abran visto esto:
valor => salidaPues asi es como se define un has
my %hash (
'valor' => 'salida'
) ;
Como pueden ver es una variable muy propia de perl que no es muy vista en otros lenguajes de programación
Y se llama de esta forma
my $variable = $hash{'valor'};
Ahora vamos a ver un ejemplo de script para que entiendan un poco mejor:
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
# (Los sistemas que uso yo)
my %sistemas = (
'Ubuntu' => 'Linux',
'iOS' => 'Darwin',
'FreeBSD' => 'FreeBSD'
);
my $OSmobile = $sistemas{'iOS'};
my $OSdesktop = $sistemas{'FreeBSD'};
my $OSnetbook = $sistemas{'Ubuntu'};
print "\nLos nucleos de los sistemas operativos que uso son $OSmobile, $OSdesktop y $OSnetbook\n\n"
Usando While
Si queremos recorrer todos los valores de nuestro %hash con el sentido (valor,salida) para poder ver ambos al mismo tiempo podemos usar each que nos hace posible hacer esto.
Veamos un ejemplo
#!/usr/bin/env perl
#===============================================
use strict;
use warnings;
use utf8;
my %sistemas = (
'iOS' => 'Darwin',
'Ubuntu' => 'Linux',
'FreeBSD' => 'FreeBSD',
'Gentoo' => 'Linux',
);
while ( my ($sitem, $nucleo) = each(%sistemas)) {
print "Sistema: " . $sitem . " Nucleo: " . $nucleo . "\n";
print "Basado en la salida del comando uname de Unix\n"
};
Y obtendrán esta salida:
Saber cuantos elementos tenemos en un hash
Como saber cuantos hash tengo:
Para eso se usa el comando keys con la sintaxis
.keys(%hash).Dentro de un bucle
Veamos un ejemplo:
#!/usr/bin/env perl
#===============================================
use strict;
use warnings;
use utf8;
my %sistemas = (
'iOS' => 'Darwin',
'Ubuntu' => 'Linux',
'FreeBSD' => 'FreeBSD',
'Gentoo' => 'Linux',
);
print "Tamaño del hash: " . keys( %sistemas ) . "\n";
Y devolverá cuantos valores hay en el %hash
Usando for
De igual manera que con while podemos recorrer nuestro hash usando el bucle for,la sintaxis es un poco distinta pero si nos damos cuenta se obtiene el mismo resultado
Ejemplo:
#!/usr/bin/env perl
#===============================================
use strict;
use warnings;
use utf8;
my %sistemas = (
'iOS' => 'Darwin',
'Ubuntu' => 'Linux',
'FreeBSD' => 'FreeBSD',
);
for my $key ( keys %sistemas ) {
my $nucleo = $sistemas{$key};
print "Sistema $key => Nucleo $nucleo\n";
};
Y se obtiene un resultado similar con for o mejor dicho keys que al usar while o mejor dicho each
Borrar elementos del hash
Al igual que agregar podemos borrar elementos que estén en nuestro hash,en esta ocasión borrar:
Para ello solo se usa el comando delete con la sintaxis:
delete( $hash{'elemento'});
Veamos un ejemplo:
#!/usr/bin/env perl
#===============================================
use strict;
use warnings;
use utf8;
my %sistemas = (
'iOS' => 'Darwin',
'Ubuntu' => 'Linux',
'FreeBSD' => 'FreeBSD',
);
print "Elementos en el hash: " . keys( %sistemas ) . "\n";
for my $key ( keys %sistemas ) {
my $nucleo = $sistemas{$key};
print "Sistema $key => Nucleo $nucleo\n";
};
print "Borrando iOS...\n";
delete( $sistemas{'iOS'});
print "Ahora hay : " . keys( %sistemas ) . " elementos en el hash\n";
Como pueden ver no es muy difícil el manejo de %hash en perl :D
Agregar elementos al hash
Al igual que borrar podemos agregar elementos que estén en nuestro hash,en esta ahora agreagar:
Solo basta usar esta sintaxis:
$hash{'valor'} = 'salida';
Que seria como poner adentro del hash
'valor' => 'salida'
Veamos un ejemplo
Agregue dos subrutinas y el comando sleep para que se vea mas amigable y no tenga que repetir los comandos,pero aquí a lo que tienen que darle atención es a lo que esta de rojo:
#!/usr/bin/env perl
#===============================================
use strict;
use warnings;
use utf8;
my %sistemas = (
'iOS' => 'Darwin',
'Ubuntu' => 'Linux',
'FreeBSD' => 'FreeBSD',
);
cargar();
visor();
sleep 1;
print "Agregando un nuevo sistema..\n";
sleep 2;
$sistemas{'Debian'} = 'Linux';
cargar();
visor();
sub visor {
for my $key ( keys %sistemas ) {
my $nucleo = $sistemas{$key};
print "Sistema $key => Nucleo $nucleo\n";
};
}
sub cargar {
print "Ahora hay : " . keys( %sistemas ) . " elementos en el hash\n";
sleep 1;
print "Cargando...\n";
sleep 2;
}
Así de fácil y eficiente puede ser hash,hay muchas cosas mas que se pueden hacer con %hash pero yo solo quiero poner en la mesa lo mas básico ya que no he enseñado rutinas,abrir archivos,bucles,modulos,etc.
Espero que te sirva de algo este pequeño tutorial en el mundo de la programación Perl y claro desde Unix.
No hay comentarios.:
Publicar un comentario
Los comentarios serán revisados antes de ser publicados.