push, pop, shift, unshift y splice

Perl proporciona las funciones push, pop, shift y unshift que permiten trabajar el array o lista como si de una pila o cola se tratase.

La función push tiene la sintáxis:

push(ARRAY,LIST)

empuja el valor de LIST en el ARRAY. La longitud del ARRAY se incrementa en la longitud de LIST. Es lo mismo que hacer:

    for $value (LIST) {
            $ARRAY[++$#ARRAY] = $value;
    }

La función pop tiene la sintáxis:

pop(ARRAY)
pop ARRAY

pop ARRAY tiene el mismo efecto que:

        $tmp = $ARRAY[$#ARRAY]; $#ARRAY--

Si no hay elementos en ARRAY, devuelve el valor undef.

Las funciones shift y unshift actuán de manera similar a push y pop pero utilizando el comienzo de la lista en vez del final de la misma.

Las funciones push, pop, shift y unshift son un caso particular de la función splice , la cual cambia los elementos de un ARRAY. La función splice toma 4 argumentos: el ARRAY a modificar, el ındice OFFSET en el cual es modificado, el número de elementos a suprimir LENGTH y la lista de elementos extra a insertar.

splice(ARRAY,OFFSET,LENGTH,LIST)
splice(ARRAY,OFFSET,LENGTH)
splice(ARRAY,OFFSET)

La función splice devuelve los elementos suprimidos del ARRAY. Si se omite LENGTH se suprime todo desde OFFSET hacia adelante. Se cumplen las siguientes equivalencias

        push(@a,$x)           splice(@a,$#a+1,0,$x)
        pop(@a)               splice(@a,-1)
        shift(@a)             splice(@a,0,1)
        unshift(@a,$x)        splice(@a,0,0,$x)
        $a[$x] = $y           splice(@a,$x,1,$y);

No se puede acortar un array asignando undef a sus elementos del final. Para acortarlo se debe asignar $#a o utilizar un operador como pop ó splice.

@a = 1 .. 10;
$a[9] = undef;  # @a = (1 ..9, undef)
$x = pop @a;    # @a = (1 ..9)
splice @a, -2;  # @a = (1 ..7) OFFSET = -2. Como se ha suprimido 
                # LENGTH, se suprime desde el penúltimo elemento
                #  hacia adelante
$#a = 4;        # @a = (1 ..5)

Casiano Rodríguez León
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19