Sacado de
perlfunc:
«
splice ARRAY o EXPR,DESPLAZAMIENTO,LONGITUD,LISTA
splice ARRAY o EXPR,DESPLAZAMIENTO,LONGITUD
splice ARRAY o EXPR,DESPLAZAMIENTO
splice ARRAY o EXPR
Elimina los elementos designados por DESPLAZAMIENTO y LONGITUD de un
array, y los sustituye por los elementos de LISTA, si los hubiere. En contexto lista, devuelve los elementos retirados del
array. En contexto escalar, devuelve el último elemento eliminado, o "undef" si no hay elementos eliminados. El
array crece o se reduce según sea necesario. Si el DESPLAZAMIENTO es negativo, se cuenta la posición desde el final del
array. Si se omite LONGITUD, se suprime todo desde DESPLAZAMIENTO en adelante. Si LONGITUD es negativa, elimina los elementos desde DESPLAZAMIENTO hacia adelante, excepto -LONGITUD elementos al final del
array. Si ambos DESPLAZAMIENTO y LONGITUD se omiten, quita todo. Si el DESPLAZAMIENTO es más allá del final del
array, Perl lanza una advertencia, y extrae al final del
array.
Las siguientes equivalencias se mantienen (suponiendo que "$[ == 0 y $#a >= $i" )
Using perl Syntax Highlighting
push(@a,$x,$y) splice(@a,@a,0
,$x,$y)
pop(@a) splice(@a,-1
)
shift(@a) splice(@a,0
,1
)
unshift(@a,$x,$y) splice(@a,0
,0
,$x,$y)
$a[$i] = $y splice(@a,$i,1
,$y)Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Ejemplo, suponiendo que las longitudes de
array se pasan antes que los propios
arrays:
Using perl Syntax Highlighting
sub aeq
{ # comparar dos listas de valores
my(@a) = splice(@_,0
,shift);
my(@b) = splice(@_,0
,shift);
return 0
unless @a == @b; # ¿misma longitud?
while (@a) {
return 0
if pop(@a) ne pop(@b);
}
return 1;
}
if (&aeq($len,@foo[1
..$len],0
+@bar,@bar)) { ... }Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
A partir de Perl 5.14, "splice" puede tomar una EXPR escalar, que debe contener la referencia a un
hash o un
array no bendecido. El argumento es desreferenciado automáticamente. Este aspecto de "splice" es considerado altamente experimental. El comportamiento exacto puede cambiar en una futura versión de Perl.
»
Ejemplo:
Using perl Syntax Highlighting
@x = 1 .. 20;
splice @x, 12, 4;
print "@x\n";
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4