我有一個關於在Perl中通過引用子例程的問題。對於如果我通過使用@_的值,它可以工作,但僅供參考移位工作。不知道爲什麼。下面我已經givedn示例代碼:爲什麼通過ref需要移位而不是@_?
這工作:
#! /usr/bin/perl
use strict;
use warnings;
my $name = 'John';
PassScalarByRef(\$name);
sub PassScalarByRef{
my $got = shift;
print "Hello $$got\n";
}
但不是這一個:
#! /usr/bin/perl
use strict;
use warnings;
my $name = 'John';
PassScalarByRef(\$name);
sub PassScalarByRef{
my $got = @_;
print "Hello $$got\n";
}
注意:Perl總是通過*參考*。你正在做的是傳遞* a * ref。 – ikegami 2013-04-08 03:22:46
未來人們遇到此問題時的注意事項:此問題與通過引用或按值傳遞完全沒有關係。它與列表分配和標量分配有關。 – 2013-04-08 09:55:02