【问题标题】:Perl "scalar" function returning "1" on an empty arrayPerl“标量”函数在空数组上返回“1”
【发布时间】:2015-12-04 14:37:10
【问题描述】:

下面的 Perl 代码将打印一个“1”,但是函数 test2 确实没有合法的输入值。为什么 Perl 会这样?

test();

sub test {
    my ($var) = @_;

    test2($var);
}

sub test2 {
    my (@array) = @_;
    print scalar @array;
}

【问题讨论】:

    标签: arrays perl scalar


    【解决方案1】:

    在test 内部,$var 被赋值设置为undef。因此,您对 test2 的调用会传递一个包含一个元素 undef 的列表。

    【讨论】:

      【解决方案2】:

      test2($var) 将一个标量传递给test2 ($var),因此my (@array) = @_; 将一个标量分配给@array。

      有问题的标量 ($var) 的值是 undef,因为您在 my ($var) = @_; 中为 $var 分配了“无”。

      也许您想要test2(@_)(通过@_ 中的零标量)而不是test2($var)(通过$var 中的一个标量)?

      【讨论】:

      • 这正是我想要的。谢谢!
      • test2( defined($var) ? $var : () ) aka test2( $var // () ) 也可能感兴趣。
      • 实际上做了更多的挖掘,我发现了这个:BEGIN { *test = \&test2 } 这使得函数 test 的定义与 test2 为函数创建别名相同。这确实是我一直在寻找的功能。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 2023-04-05
      • 1970-01-01
      • 2018-03-24
      相关资源
      最近更新 更多