Perl中如何检查一个值是否未定义?

3

最好通过一个例子来说明:

my $var1=1;
my $var2;
my $var3=3;

# say "at least one undef" if at least one of $var1, $var2, $var3 is undef

显然,我可以明确地循环并执行此操作,但我总是喜欢找到能够实现同样结果的一行代码。

可能是重复的问题:如何检查Perl标量变量是否已初始化? - brian d foy
2个回答

10
if (grep { !defined } $var1, $var2, $var3) {
  say 'at least one undef'
}

一句话描述

say 'at least one undef' if grep { !defined } $var1, $var2, $var3;

// 是一种短路运算符,因此如果您需要根据单个值的定义情况有条件地执行代码路径,它将非常有用。虽然我在这里想不出用途,但是无论如何都有很多方法可以做到。 - Bob
@David B,“//”是定义或运算符,因此它只能用于计算“至少一个已定义”。要获取“至少一个未定义”,您需要一个已定义且运算符,但这种运算符(目前)不存在。 - cjm

1

在 Bob 的回答基础上,有些情况下,您可能想要获取实际计数

say 'has ', scalar ( grep { not defined } $var1,$var2,$var3 ),' undef';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接