Perl "scalar" 函数在空数组上返回“1”
Perl "scalar" function returning "1" on an empty array
以下 Perl 代码将打印“1”,但函数 test2
确实没有合法的输入值。为什么 Perl 会这样?
test();
sub test {
my ($var) = @_;
test2($var);
}
sub test2 {
my (@array) = @_;
print scalar @array;
}
在 test
中,$var
被赋值设置为 undef
。因此,您对 test2
的调用传递了一个包含一个元素的列表,undef
.
test2($var)
将一个标量传递给 test2
($var
),因此 my (@array) = @_;
.
将一个标量分配给 @array
相关标量 ($var
) 的值为 undef
,因为您在 my ($var) = @_;
中将 "nothing" 分配给了 $var
。
也许您想要 test2(@_)
(传递 @_
中的零标量)而不是 test2($var)
(传递一个标量 $var
)?
以下 Perl 代码将打印“1”,但函数 test2
确实没有合法的输入值。为什么 Perl 会这样?
test();
sub test {
my ($var) = @_;
test2($var);
}
sub test2 {
my (@array) = @_;
print scalar @array;
}
在 test
中,$var
被赋值设置为 undef
。因此,您对 test2
的调用传递了一个包含一个元素的列表,undef
.
test2($var)
将一个标量传递给 test2
($var
),因此 my (@array) = @_;
.
@array
相关标量 ($var
) 的值为 undef
,因为您在 my ($var) = @_;
中将 "nothing" 分配给了 $var
。
也许您想要 test2(@_)
(传递 @_
中的零标量)而不是 test2($var)
(传递一个标量 $var
)?