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)?