Funciones sobre arreglos

scalar
Devuelve el tamaño en número de elementos de un arreglo.

my @arreglo = (1,2,3,"cuatro");
print scalar(@arreglo); # imprime 4

push
Ya en la sección 2.3.2 vimos cómo asignar elementos a un arreglo usando subíndices. La función push permite añadir elementos o incluso arreglos al final de un arreglo dado.

push(@arreglo,"elemento");
push(@arreglo,$elemento);

my @arreglo = (1,2,3);
my @otro_arreglo = (4,5,6);
push(@arreglo,@otro_arreglo); # ahora @arreglo contiene 1,2,3,4,5,6

unshift
Añade elementos o arreglos al principio de un arreglo dado.

my @arreglo = (1,2,3);
my @otro_arreglo = (4,5,6);
unshift(@arreglo,@otro_arreglo); # ahora @arreglo contiene 4,5,6,1,2,3

pop
Extrae y devuelve el último elemento de un arreglo (un escalar), que reduce en uno su tamaño.

my @arreglo = (1,2,3);
my $ultimo = pop(@arreglo); # $ultimo = 3, @arreglo = (1,2)

shift
Extrae y devuelve el primer elemento de un arreglo (un escalar), que reduce en uno su tamaño.

my @arreglo = (1,2,3);
my $primer = shift(@arreglo); # $primer = 1, @arreglo = (2,3)

reverse
Toma un arreglo y devuelve otro arreglo con los mismos elementos invertidos.

my @arreglo = (1,2,3);
my @invertido = reverse(@arreglo); # @invertido = (3,2,1)

grep
Recibe dos parámetros, una expresión regular y un arreglo, y compara el patrón con cada uno de los elementos del arreglo. Devuelve un arreglo con los elementos que coincidieron con el patrón. Es muy útil para comprobar si ciertos valores están contenidos en un arreglo.

my @arreglo = ("uno","dos","tres");
my @coinc = grep(/s/,@arreglo); # @coinc = ("dos","tres")

sort
Ordena los elementos de un arreglo de menor a mayor alfanuméricamente, devolviendo otro arreglo ya ordenado. Se puede cambiar el criterio de ordenación.

my @arreglo = (3,7,1.1,11.8);
my @ordenado = sort(@arreglo);          # @ordenado contiene 1.1, 11.8, 3, 7
@ordenado = sort {$a<=>$b} (@ordenado); # ahora contiene 1.1, 3, 7, 11.8, criterio numerico ascendente
@ordenado = sort {$b<=>$a} (@ordenado); # ahora contiene 11.8, 7, 3, 1.1, criterio numerico descendente

map
Aplica una función o subrutina (ver 3) sobre los elementos de un vector y devuelve otro vector con los resultados.

my @vector = (10,20,30,100);

my @vector_cociente = map( $_/10, @vector);       # @vector_cociente = (1,2,3,10)

my @vector_cociente = map( div($_,10), @vector);  # @vector_cociente = (1,2,3,10)

sub div{ return($_[0]/$_[1]) }

Bruno Contreras-Moreira
http://www.eead.csic.es/compbio