Programación en Perl/Funciones

Funciones para array

editar

Hay varias funciones para trabajar con arrays Las mas básicas son push, pop, shift y splice donde:

#!/usr/bin/env perl

# cada elemento adquiere un valor en el listado, desde 0 hasta el ultimo

my @array = ('feo', 'mico', 'lindo', 'leon', 'gande', 'Andres');

my $tipo = $array[-1]; #tomamos el ultimo elemento, podria ser
                       #my $tipo = $array[5], donde $array[5] == $array[-1]

my $nombre = pop @array; #@array ya no tiene a "Andres"M;

push @array, $tipo; #nuevamente ponemos a "Andres" en la lista.

my $como = shift @array; #tomamos el primer valor del array
                         #esto is igual que $array[0]

print "El $array[1] es muy $como\n"; #hemos hecho esto sin alterar el array

La diferencia entre un array y una lista está en que el array se puede tirar, empujar, mover y agregar elementos y una lista es tan sólo un montón de valores agrupados donde no tiene una longitud cambiable.

Buscar en un arrary

editar

En este ejemplo tenemos un array que tiene de contenido una lista de colores de los cuales algunos estan repetidos. Navegamos dentro del array en orden y comprobamos si alguno de los colores se repite. En caso de que alguno se repita (es decir, que ya lo tenemos dentro del array nuevo) no lo ingresamos otra ves por lo que tenemos un nuevo listado sin repeticiones.

#!/usr/bin/perl

@array = ('azul','rojo','verde','rojo','negro','azul','blanco');## CARGANDO UNA LISTA

foreach (@array)                                                ## ASIGNANDO A $_ CADA ELEMENTO DE @array
{
     $line  = $_;                                               ## CARGANDO $line CON VALOR EN $_
     @found = grep(/^$line$/, @nuevo);                          ## SI ALGUN VALOR DE LISTA @nuevo COINCIDE
                                                                ## CON VALOR $line LO COPIO A @found
     if (!@found)                                               ## SI LISTA FOUND ES MAYOR QUE 0 ELEMENTOS...
     {
          push(@nuevo,$_);                                      ## AGREGO ELEMENTO LEIDO A LISTA @nuevos
     }
}

foreach (@nuevo)                                                ## ASIGNANDO A $_ CADA ELEMENTO DE @nuevo
{
     $line = $_;                                                ## CARGANDO $line CON VALOR EN $_
     print $line,"\n";                                          ## IMPRIMIENDO $line (UNO POR RENGLON)
}

## TIMTOWTDI (There Is More Than One Way To Do It) (n.t. Hay Mas De Una Forma De Hacerlo)...

## my (%unico);                                                 ## DEFINO UN HASH QUE GUARDE SOLO 1 COLOR
## $unico{$_}++ foreach ('azul','rojo','verde','rojo','negro','azul','blanco'); ## CARGO LOS COLORES
## print($_,$/) foreach (keys(%unico));                         ## LISTO SOLO LOS NOMBRES DE LOS COLORES
                                                                ## SOLO PUEDE HABER 1 CLAVE DE CADA COLOR...

Más Funciones

editar

Elimina el último carácter de una cadena y devuelve el carácter "chopeado"

$escalar = "vivan los novios";
print (chop $escalar);
print "\n";                                                      ## Para crear nueva línea (como pulsar la tecla ENTER) 
print $escalar;                                                  ## Imprimir el contenido de la variable $escalar
EL RESULTADO seria:
s                                                                ## La s última de novios
vivan los novio                                                  ## Fíjate que la s ya no acompaña a novio(s)

Si se usa con arrays cada elemento es "chopeado" pero solo el último valor del ultimo chop es devuelto. Si se usa con un hash elimina los valores pero no las llaves.

Funciones utilizadas: foreach - push - grep - chop

Conceptos implicados: Expresión regular - grep - array - hash


Índice - Manejo de archivos >>