Если вас не волнуют мутации (подразумеваемые самореферентными lhs @foo
= что-то, ссылающиеся на @foo
), используйте два аргумента splice()
, см. perldoc - f сращивание для получения дополнительной информации.
Сращивать массив, смещение
Удаляет элементы, обозначенные OFFSET и LENGTH, из массива и заменяет их элементами LIST, если таковые имеются. В контексте списка возвращает элементы, удаленные из массива , В скалярном контексте возвращает последний удаленный элемент или «undef», если элементы не удалены. Массив увеличивается или уменьшается по мере необходимости. Если OFFSET отрицателен, то он начинается так далеко от конца массива. Если ДЛИНА опущена, удаляет все с OFFSET и далее. Если LENGTH отрицателен, удаляет элементы из OFFSET и далее, за исключением элементов -LENGTH в конце массива. Если оба параметра OFFSET и LENGTH опущены, удаляется все. Если OFFSET находится за концом массива, perl выдает предупреждение и склеивает в конце массива.
Затем следите за эффектом:
@_ = 1..10;
splice @_, 5;
say for @_;
@_ = 1..3;
splice @_, 5;
say for @_;
Если вы используете warnings
, и я надеюсь, что вам придется проверить длину (как в предложении Аксемана) или отключить шумовое предупреждение ( splice () смещено за конец массива ):
{
no warnings 'misc';
splice @_, 5;
}