以下Perl代码将打印" 1"但函数test2
实际上没有合法的输入值。为什么Perl这样做?
test();
sub test {
my ($var) = @_;
test2($var);
}
sub test2 {
my (@array) = @_;
print scalar @array;
}
答案 0 :(得分:3)
test2($var)
将一个标量传递给test2
($var
),因此@array
将一个标量分配给my (@array) = @_;
。
有问题的标量($var
)的值为undef
,因为您已分配"没有" $var
中的my ($var) = @_;
。
也许你想要test2(@_)
(传递@_
中的零标量)而不是test2($var)
(传递一个标量$var
)?
答案 1 :(得分:1)
在test
内,$var
被分配设置为undef
。因此,您对test2
的调用会传递一个包含一个元素的列表undef
。