Документация для push()
довольно ясна.
push ARRAY, LIST
Рассматривает ARRAY как стекдобавление значений LIST к концу ARRAY.Длина ARRAY увеличивается на длину LIST.Имеет тот же эффект, что и
for my $value (LIST) {
$ARRAY[++$#ARRAY] = $value;
}
, но более эффективен.Возвращает количество элементов в массиве после завершенного нажатия.
Начиная с Perl 5.14, экспериментальная функция позволила push принять скалярное выражение.Этот эксперимент был признан неудачным и был удален с Perl 5.24.
Итак, нет.push()
работает только с одним массивом одновременно.
Ваше решение:
push (@arr1,@arr2), "extra";
Будет иметь эффект добавления всех элементов @arr2
в конец @arr1
.«Extra» будет игнорироваться, так как закрывающая скобка будет рассматриваться как конец списка параметров до push()
.В use warnings
вы получите предупреждение:
Бесполезное использование константы («extra») в пустом контексте
Это можно сделать с помощью двух вызововдо push()
и скрывая сложность в подпрограмме.Наивное решение использует ссылки на массивы:
sub twopush {
my ($a1, $a2, @elems) = @_;
push @$a1, @elems;
push @$a2, @elems;
}
twopush(\@arr1, \@arr2, "extra");
Но это один из тех редких случаев, когда прототипы подпрограмм Perl оказываются полезными.Вы можете указать подпрограмме, что первые два параметра являются массивами, и компилятор будет обрабатывать получение ссылок.
sub twopush(\@\@@) {
my ($a1, $a2, @elems) = @_;
push @$a1, @elems;
push @$a2, @elems;
}
twopush(@arr1, @arr2, "extra");