4

我在很多 Perl 书籍中搜索,但找不到答案。我有这个代码,我想它所做的是将参数的票分配给 $ticket 如果它存在,如果不存在,则分配 0。

my $ticket   = $params->{ticket} // 0;
4

2 回答 2

9

//表示已定义或。如果已定义$ticket则赋值,否则为 0。$params->{ticket}

尽管它在 C 中没有直接的等价物,但 Perl 的//运算符与其 C 风格的或有关。实际上,它与 完全相同||,只是它测试的是左侧的定义性而不是其真实性。因此,如果定义了则EXPR1 // EXPR2返回 的值EXPR1,否则EXPR2返回 的值。

它是在 5.10 中添加的

在上面的代码中,$params->{ticket}仍然可以有垃圾,所以在使用它之前确保值符合预期的模式。

于 2013-04-11T14:56:10.477 回答
4

Perl文档说:

"EXPR1 // 如果 EXPR2 已定义,则返回 EXPR1 的值,否则返回 EXPR2 的值。"

它类似于逻辑或,但测试定义性。

于 2013-04-11T14:56:56.453 回答