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

在C#中是否存在与空合并运算符(??)等价的Perl?,c#,perl,null-coalescing-operator,C#,Perl,Null Coalescing Operator,我开始非常喜欢C的操作符。我已经习惯了这样一个事实,在某些语言中有一些方便的东西,很可能在Perl中也有 但是,我找不到??在Perl中等效。有吗?据我所知没有 Perl并不是空概念的大用户。它确实对变量是否未定义进行了测试。没有像这样的特殊操作员??尽管如此,但您可以将条件?:运算符与undef测试一起使用,并且非常接近 我也没有看到Perl中的任何东西。< P> 5.10有“代码> //< /COD>运算符,如果你认为Perl中的 UNDEF 的概念相当于C中的代码

我开始非常喜欢C的操作符。我已经习惯了这样一个事实,在某些语言中有一些方便的东西,很可能在Perl中也有

但是,我找不到??在Perl中等效。有吗?据我所知没有

Perl并不是空概念的大用户。它确实对变量是否未定义进行了测试。没有像这样的特殊操作员??尽管如此,但您可以将条件?:运算符与undef测试一起使用,并且非常接近


我也没有看到Perl中的任何东西。

< P> 5.10有“代码> //< /COD>运算符,如果你认为Perl中的<代码> UNDEF <代码>的概念相当于C中的代码<0Ung/<代码>的概念,则语义等价。 示例A:

my$a=undef;
我的$b=$a//5;#$b=5;
例B:

my$a=0;
我的$b=$a//5;#$b=0;

实际上,短路或操作员在评估undef时也会工作:

my $b = undef || 5;  # $b = 5;
但是,计算0时将失败,但为true:

my $b = 0 || 5;  # $b = 5;
如前所述,Perl 5.10有一个
/
操作符,用于测试其左手操作符是否定义了正确性而不是真实性:

 use 5.010;

 my $value = $this // $that;
如果您使用的是早期版本的Perl,那么会有点混乱。
|
无法工作:

 my $value = $this || $that;
在这种情况下,如果
$this
是0或空字符串(两者都已定义),则将得到
$this
。为了避免这种情况,习惯用法是使用条件运算符,这样您就可以自己进行检查:

 my $value = defined( $this ) ? $this : $that;

该问题包含任意数量的参数,因此答案包含一个子例程:

在这里您可以看到它-将返回列表的第一个定义的/非空字符串值:

sub coalesce { (grep {length} @_)[0] }

如果您解释一下??操作员有。@pavium:这里有一个链接,指向??接线员:澄清什么??意味着,
$a??5
$a!=空的$a:5
这意味着如果$a不为空,则表达式的结果为$a,否则结果为5。如果默认值为null,
$a=$a??5
。好吧,你没有回答我,但多亏了这一页,我意识到我的问题有点离题了,我可以用简单的| |(我把它作为一个单独的答案)是的,我自动认为unde等同于NULL thanks。5.10之前的习惯用法只是定义了
($a)$a:$b
,它可以完成这项工作,而且读起来足够清晰。霍布斯:是的,但我必须写两次(这不一样,当它是,例如,调用子例程时)。顺便说一句,我真的很喜欢我的前提“当功能很好时,它可能也是用perl编写的:)我认为没有必要这样做,多次使用
/
也可以。