Специальный массив @_
, где присутствуют все аргументы, переданные функции, на самом деле является псевдонимом переданных аргументов. Следовательно, любое изменение, которое мы делаем непосредственно на этот специальный массив @_
, также будет отражено в основном. Это ясно.
#!/usr/bin/perl
use warnings;
use strict;
$\="\n";
sub func {
print \@_;
$_++ for(@_);
}
my @arr=(2..4);
print \@arr;
func(@arr);
print "@arr";
В приведенной выше программе я ожидал, что ссылка @arr
и @_
будет указывать на одно и то же местоположение, поскольку это псевдоним. Но это не так.
При запуске выше:
ARRAY(0x1b644d0)
ARRAY(0x1b644e0)
3 4 5
Если они указывают на 2 разных местоположения, как изменения, выполненные в @_
, отражаются в @arr
?
Я вижу что-то не так? Пожалуйста, совет.