我开始非常喜欢C#的??运营商。而且我已经习惯了这样一个事实,即在某些语言中有一些方便的东西,它最有可能在Perl中。
然而,我找不到??相当于Perl。有没有?
答案 0 :(得分:32)
从5.10开始,有//
运算符,如果您认为Perl中undef
的概念等同于C#中null
的概念,则它在语义上是等效的。
示例A:
my $a = undef;
my $b = $a // 5; # $b = 5;
例B:
my $a = 0;
my $b = $a // 5; # $b = 0;
答案 1 :(得分:6)
作为Adam says,Perl 5.10有//
运算符,用于测试其左手运算符的定义而不是真值:
use 5.010;
my $value = $this // $that;
如果您使用的是早期版本的Perl,则会有点混乱。 ||
无效:
my $value = $this || $that;
在这种情况下,如果$this
为0或空字符串(两者都已定义),您将获得$that
。为了解决这个问题,成语是使用条件运算符,这样你就可以自己检查:
my $value = defined( $this ) ? $this : $that;
答案 2 :(得分:2)
实际上,在评估undef时,短路OR运算符也会起作用:
my $b = undef || 5; # $b = 5;
但是,在评估0时会失败但是为真:
my $b = 0 || 5; # $b = 5;
答案 3 :(得分:0)
这个问题暗示了任意数量的论点,所以答案意味着一个子程序:
在这里你得到它 - 将返回列表的第一个定义/非空字符串值:
sub coalesce { (grep {length} @_)[0] }
答案 4 :(得分:-4)
不是我知道的。
Perl并不是null概念的大用户。它确实测试变量是否未定义。没有特殊的操作员喜欢??但是,你可以使用带有undef测试的条件?:运算符并且非常接近。
我在perl operator list中也没有看到任何内容。