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