我有一个关于在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