21

我开始真正喜欢C#了??操作员。而且我已经习惯了这样一个事实,即在某些语言中有一些方便的地方,它很可能也在 Perl 中。

但是,我找不到??Perl 中的等价物。有没有?

4

5 回答 5

40

从 5.10 开始,有//运算符,如果您认为undefPerl 中的概念等同null于 C# 中的概念,则它在语义上是等效的。

示例 A:

my $a = undef;
my $b = $a // 5;  # $b = 5;

示例 B:

my $a = 0;
my $b = $a // 5;  # $b = 0;
于 2009-12-12T02:04:25.043 回答
8

正如亚当所说,Perl 5.10 有一个//运算符来测试其左手运算符的定义性而不是真实性:

 use 5.010;

 my $value = $this // $that;

如果您使用的是早期版本的 Perl,那就有点乱了。将||不起作用:

 my $value = $this || $that;

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

 my $value = defined( $this ) ? $this : $that;
于 2010-09-25T18:57:43.443 回答
1

实际上,短路 OR 运算符在评估 undef 时也可以工作:

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

但是,当评估 0 但为真时,它将失败:

my $b = 0 || 5;  # $b = 5;
于 2009-12-14T08:23:31.137 回答
0

这个问题暗示了任意数量的参数,所以答案暗示了一个子例程:

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

sub coalesce { (grep {length} @_)[0] }
于 2013-01-25T15:25:11.817 回答
-4

从来没听说过。

Perl 并不是 null 概念的真正大用户。它确实对变量是否未定义进行了测试。没有像 ?? 这样的特殊运算符 虽然,但您可以使用条件 ?: 运算符与 undef 测试并获得非常接近。

而且我在 perl运算符列表中也看不到任何内容。

于 2009-12-12T01:50:18.957 回答