Quiero eliminar elementos de algunas matrices grandes con una subrutina. Utilizo una referencia para evitar una copia en el submarino.¿Cómo puedo eliminar un elemento de una matriz referenciada?
@a=qw(ok now what is hi the matter);
sub zonk {
$array=shift; # this is a reference of an array
foreach $i (0..$#$array) { # I saw some say to avoid last element to get size
#if (@$array[$i] =~ /hi/) { delete @$array[$i]; }
#if ($array->[$i] =~ /hi/) { delete $array->[$i]; }
#if ($array->[$i] =~ /hi/) { delete @$array->[$i]; }
if ($array->[$i] =~ /hi/) { print "FOUND "; }
print $array->[$i],"\n";
}
@$array = grep{$_} @$array; # removes empty elements
}
zonk(\@a);
print join(':',@a);
Si funciono con el programa anterior al igual que me sale:
ok
now
what
is
FOUND hi
the
matter
ok:now:what:is:hi:the:matter
Pero si uso cualquiera de las líneas de comentarios vez me sale:
argumento de eliminación no es un elemento de control o de rebanar en la línea hi.pl 10.
Intenté empalmar originalmente pero luego los índices cambiaban y confundían la iteración. Sería bueno saber todos los métodos mencionados en esta publicación, sin embargo, el más eficiente es lo que estoy buscando :)
Adición: Esto funciona perfectamente (me refiero a cada línea comentada) en mi máquina Linux (ubuntu 9.10, perl 5.10) pero el error anterior está en mi caja de Windows 7 en el trabajo usando perl 5.005_03. La actualización no es una opción.
Gracias
No funciona en mi caja de Windows 7 con Perl 5.005. Agregué un apéndice a mi pregunta original. – Shawn