如何grep数组中的未定义值?

How to grep undefined values in an array?

我有一个未定义值的数组:

[0] 0.1431,
[1] undef

然后我将这个值压入一个数组,Perl 没有警告我关于未初始化的值(我无法想象为什么有人会希望在没有警告或 die 的情况下发生这种情况,即使我已设置 use autodie ':all',但这是另一回事)

所以我在这些数组上尝试 grep 以防止将 undef 值推入数组,因此:

if (grep {undef} @array) {
    next
}

但是,这并没有捕捉到价值。

如何 grep Perl5 中的未定义值?

您可以使用 defined 删除未定义的项目:

use warnings;
use strict;
use Data::Dumper;

my @a1 = (1,2,3,undef,undef,4);
print Dumper(\@a1);

my @a2 = grep { defined } @a1;
print Dumper(\@a2);

输出:

$VAR1 = [
          1,
          2,
          3,
          undef,
          undef,
          4
        ];
$VAR1 = [
          1,
          2,
          3,
          4
        ];

grep 表示未定义:

use warnings;
use strict;

my @array = (0, undef, undef, 3);

if (grep {! defined} @array) {
    print "undefined values in array\n";
}

您想要 have/allow 数组中的未定义值有多种原因。一个这样的有益场景是将位置参数传递给函数时。

为什么不首先阻止添加值?

替换

push @array, LIST;

push @array, grep defined, LIST;

如果它是一个标量,你也可以使用

push @array, $scalar if defined($scalar);