Я хочу удалить элементы из нескольких больших массивов с помощью подпрограммы. Я использую ссылку, чтобы избежать копирования в суб.Как удалить элемент ссылочного массива?
@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);
Если я запускаю программу выше, как это я получаю:
ok
now
what
is
FOUND hi
the
matter
ok:now:what:is:hi:the:matter
Но если я использую любого из комментируемых линий вместо этого я получаю:
удаления аргумента не является HASH элемента или срез на линии hi.pl 10.
Сначала я попробовал сплайсинг, но затем индексы менялись и путали итерацию. Было бы неплохо узнать все методы, упомянутые в этом посте, однако наиболее эффективным является то, что я ищу :)
Приложение: Это отлично работает (я имею в виду каждую прокомментированную строку) на моей машине linux (ubuntu 9.10, perl 5.10), но приведенная выше ошибка находится на моем ящике Windows 7 при работе с использованием perl 5.005_03. Модернизация не является вариантом.
Благодаря
Не работает на моем ящике Windows 7 с Perl 5.005. Я добавил добавление к моему первоначальному вопросу. – Shawn