関数に渡されたすべての引数が存在する特別な配列 は@_
、実際には渡された引数のエイリアスです。したがって、この特別な配列に直接加えた変更は@_
、メインにも反映されます。これは明らかです。
#!/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
ますか?
私は何か間違っているのですか?ご意見をお聞かせください。