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

Kar*_*lek 17 c# perl null-coalescing-operator

我开始真的很喜欢C#的运营商.而且我很习惯这样一个事实:在某些语言中有一些方便的东西,它最有可能也在Perl中.

但是,我找不到?? 相当于Perl.有没有?

Ada*_*ire 33

从5.10开始,有一个//运算符,如果你认为undefPerl中的概念等同null于C#中的概念,那么它在语义上是等价的.

例A:

my $a = undef;
my $b = $a // 5;  # $b = 5;
Run Code Online (Sandbox Code Playgroud)

例B:

my $a = 0;
my $b = $a // 5;  # $b = 0;
Run Code Online (Sandbox Code Playgroud)

  • 5.10之前的习语只是定义($ a)?$ a:$ b`,它可以完成工作并且读得足够清楚. (3认同)
  • 顺便说一句,我真的很喜欢我的前提"当功能很好时,它可能也在perl中"仍然保持:) (3认同)

bri*_*foy 7

正如亚当所说,Perl 5.10有一个//运算符,用于测试其左手操作符的定义而不是真值:

 use 5.010;

 my $value = $this // $that;
Run Code Online (Sandbox Code Playgroud)

如果您使用的是早期版本的Perl,则会有点混乱.这||将无效:

 my $value = $this || $that;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果$this为0或空字符串,两者都已定义,您将得到$that.为了解决这个问题,成语是使用条件运算符,以便您可以自己检查:

 my $value = defined( $this ) ? $this : $that;
Run Code Online (Sandbox Code Playgroud)