我开始喜欢上C#的??操作符,而且我已经习惯了这样一个事实,即在某些语言中,如果有什么东西很方便的话,它很可能也在Perl中。但是,我在Perl中找不到??等价物,有吗?
llmtgqce1#
从5.10开始,有了//操作符,如果你认为Perl中undef的概念等同于C#中null的概念,那么它在语义上是等同的。示例A:
//
undef
null
my $a = undef; my $b = $a // 5; # $b = 5;
示例B:
my $a = 0; my $b = $a // 5; # $b = 0;
5rgfhyps2#
正如Adam所说,Perl 5.10有一个//操作符,它测试其左手操作数的定义性而不是真值:
use 5.010; my $value = $this // $that;
如果您使用的是Perl的早期版本,那么||就不起作用了:
||
my $value = $this || $that;
在这种情况下,如果$this为0或空字符串,这两个值都定义好了,那么就得到$that,为了避免这个问题,习惯用法是使用条件运算符,这样你就可以自己进行检查:
$this
$that
my $value = defined( $this ) ? $this : $that;
knpiaxh13#
实际上,在计算undef时,短路OR运算符也会起作用:
my $b = undef || 5; # $b = 5;
但是,当计算0但为真时,它将失败:
my $b = 0 || 5; # $b = 5;
n53p2ov04#
这个问题隐含了任意数量的参数,所以答案隐含了一个子例程:这里你可以看到-将返回列表的第一个定义的/非空字符串值:
sub coalesce { (grep {length} @_)[0] }
sf6xfgos5#
据我所知没有。Perl并不是一个真正的null概念的大用户。它有一个测试变量是否未定义。没有像??though这样的特殊操作符,但是你可以使用条件?:一个未知测试的操作员,然后非常接近而且我也没有在perl操作符列表中看到任何内容。
5条答案
按热度按时间llmtgqce1#
从5.10开始,有了
//
操作符,如果你认为Perl中undef
的概念等同于C#中null
的概念,那么它在语义上是等同的。示例A:
示例B:
5rgfhyps2#
正如Adam所说,Perl 5.10有一个
//
操作符,它测试其左手操作数的定义性而不是真值:如果您使用的是Perl的早期版本,那么
||
就不起作用了:在这种情况下,如果
$this
为0或空字符串,这两个值都定义好了,那么就得到$that
,为了避免这个问题,习惯用法是使用条件运算符,这样你就可以自己进行检查:knpiaxh13#
实际上,在计算undef时,短路OR运算符也会起作用:
但是,当计算0但为真时,它将失败:
n53p2ov04#
这个问题隐含了任意数量的参数,所以答案隐含了一个子例程:
这里你可以看到-将返回列表的第一个定义的/非空字符串值:
sf6xfgos5#
据我所知没有。
Perl并不是一个真正的null概念的大用户。它有一个测试变量是否未定义。没有像??though这样的特殊操作符,但是你可以使用条件?:一个未知测试的操作员,然后非常接近
而且我也没有在perl操作符列表中看到任何内容。