Если вы хотите удалить элемент из массива, используйте мультивалютную функцию splice
.
my @foo = qw( a b c d e f );
splice( @foo, 3, 1 ); # Remove element at index 3.
С помощью splice
вы можете выполнять любые другие манипуляции. См. perldoc для получения дополнительной информации.
Как намекает на кодхолик, вы никогда не должны модифицировать массив, повторяя его с помощью цикла for
. Если вы хотите изменить массив во время итерации, используйте цикл while
.
Причина этого в том, что for
оценивает выражение в скобках один раз и сопоставляет каждый элемент в списке результатов с псевдонимом. Если массив изменится, указатели испортятся, и последует хаос.
A while
оценивает условие каждый раз в цикле, поэтому вы не столкнетесь с проблемами с указателями на несуществующие значения.