Потому что +
в Perl является только арифметическим оператором. Это заставляет его аргументы интерпретировать как числа, несмотря ни на что. Вот почему Perl имеет отдельный оператор для конкатенации строк (.
).
Что вы делаете, эффективно добавляет адреса, где хранятся массивы.
Конкатенация массива выполняется путем простого перечисления массивов один за другим. Однако, если вы используете ссылки на массивы ([
... ]
), то вам придется разыменованием их первым с @{
... }
:
perl -wE 'say(@{[1,2,3]}, @{[4,5,6]})'
Но обычно вы будете использовать массив переменные и не требуется дополнительное синтаксис.
perl -wE 'my @a = (1,2,3); my @b = (4,5,6); say join("-",@a,@b)'
#=> 1-2-3-4-5-6
То же самое относится к хешам; my %c = (%a,%b);
объединит содержимое %a
и %b
(в таком порядке, чтобы значение %b
для любых распространенных ключей переписало %a
) в новый хеш %c
. Вы можете использовать my $c = { %$a, %$b };
, чтобы сделать то же самое со ссылками. Один полученный, который вы используете в своей попытке +
, заключается в том, что {}
может быть интерпретирован как пустой блок кода вместо пустого хэша.
Что заставило вас думать, что это сработает? –
Запустите 1-ю команду много раз; вы получаете разные результаты? – toolic
@Mark: мои привычки питона .. – planetp