如何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);
我有一个未定义值的数组:
[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);