martes, 13 de noviembre de 2012

Tutorial perl desde Unix variables hash

Vamos a ver otro tipo de variable en nuestro lenguaje que estamos viendo estos días,perl mi lenguaje interpretado favorito,en este caso veremos nos concentraremos en los hashes ya que como he dicho exsiten ditintos tipos de variables en Perl.


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 => salida
Pues 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.