我开始真正喜欢C#了??操作员。而且我已经习惯了这样一个事实,即在某些语言中有一些方便的地方,它很可能也在 Perl 中。
但是,我找不到??Perl 中的等价物。有没有?
我开始真正喜欢C#了??操作员。而且我已经习惯了这样一个事实,即在某些语言中有一些方便的地方,它很可能也在 Perl 中。
但是,我找不到??Perl 中的等价物。有没有?
从 5.10 开始,有//
运算符,如果您认为undef
Perl 中的概念等同null
于 C# 中的概念,则它在语义上是等效的。
示例 A:
my $a = undef;
my $b = $a // 5; # $b = 5;
示例 B:
my $a = 0;
my $b = $a // 5; # $b = 0;
正如亚当所说,Perl 5.10 有一个//
运算符来测试其左手运算符的定义性而不是真实性:
use 5.010;
my $value = $this // $that;
如果您使用的是早期版本的 Perl,那就有点乱了。将||
不起作用:
my $value = $this || $that;
在这种情况下,如果$this
是 0 或空字符串,两者都已定义,您将得到$that
. 为了解决这个问题,习惯用法是使用条件运算符,以便您可以进行自己的检查:
my $value = defined( $this ) ? $this : $that;
实际上,短路 OR 运算符在评估 undef 时也可以工作:
my $b = undef || 5; # $b = 5;
但是,当评估 0 但为真时,它将失败:
my $b = 0 || 5; # $b = 5;
这个问题暗示了任意数量的参数,所以答案暗示了一个子例程:
在这里你得到它 - 将返回列表的第一个定义/非空字符串值:
sub coalesce { (grep {length} @_)[0] }
从来没听说过。
Perl 并不是 null 概念的真正大用户。它确实对变量是否未定义进行了测试。没有像 ?? 这样的特殊运算符 虽然,但您可以使用条件 ?: 运算符与 undef 测试并获得非常接近。
而且我在 perl运算符列表中也看不到任何内容。