在C#中是否存在等效于空合并运算符(??)的Perl?

时间:2009-12-12 01:47:28

标签: c# perl null-coalescing-operator

我开始非常喜欢C#的??运营商。而且我已经习惯了这样一个事实,即在某些语言中有一些方便的东西,它最有可能在Perl中。

然而,我找不到??相当于Perl。有没有?

5 个答案:

答案 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中也没有看到任何内容。