在C#中,有没有一个Perl等价于空合并操作符(??)?

kpbwa7wx  于 2022-12-19  发布在  Perl
关注(0)|答案(5)|浏览(142)

我开始喜欢上C#的??操作符,而且我已经习惯了这样一个事实,即在某些语言中,如果有什么东西很方便的话,它很可能也在Perl中。
但是,我在Perl中找不到??等价物,有吗?

llmtgqce

llmtgqce1#

从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;
5rgfhyps

5rgfhyps2#

正如Adam所说,Perl 5.10有一个//操作符,它测试其左手操作数的定义性而不是真值:

use 5.010;
 
 my $value = $this // $that;

如果您使用的是Perl的早期版本,那么||就不起作用了:

my $value = $this || $that;

在这种情况下,如果$this为0或空字符串,这两个值都定义好了,那么就得到$that,为了避免这个问题,习惯用法是使用条件运算符,这样你就可以自己进行检查:

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

knpiaxh13#

实际上,在计算undef时,短路OR运算符也会起作用:

my $b = undef || 5;  # $b = 5;

但是,当计算0但为真时,它将失败:

my $b = 0 || 5;  # $b = 5;
n53p2ov0

n53p2ov04#

这个问题隐含了任意数量的参数,所以答案隐含了一个子例程:
这里你可以看到-将返回列表的第一个定义的/非空字符串值:

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

sf6xfgos5#

据我所知没有。
Perl并不是一个真正的null概念的大用户。它有一个测试变量是否未定义。没有像??though这样的特殊操作符,但是你可以使用条件?:一个未知测试的操作员,然后非常接近
而且我也没有在perl操作符列表中看到任何内容。

相关问题