33

我找到了我需要的一些 Perl 代码的示例,但其中有一些我不认识的东西。

my $i //= '08';

我在任何地方都找不到任何参考!它似乎与以下内容相同:

my $i = '08';

我错过了什么吗?

4

5 回答 5

56

//=运算符是or 'logical defined-or'运算符的赋值运算符版本。//

my变量声明的上下文中,变量最初是未定义的,因此它等同于赋值(最好写成my $i = '08';)。不过,总的来说,

$i //= '08';

是以下的简写:

$i = (defined $i) ? $i : '08';

它记录在 Perl 运算符 ( perldoc perlop) 中的两个地方(简而言之,在赋值运算符部分下,完整的在“逻辑定义或”部分)。它是在 Perl 5.10.0 中添加的。

于 2012-12-12T19:00:17.000 回答
7

简短的回答:它与my $i = '08';.


首先,我们来看看$i //= '08';

EXPR1 //= EXPR2;

是相同的

EXPR1 = EXPR1 // EXPR2;

除了 EXPR1 只计算一次。这是一种方便的书写方式

EXPR1 = EXPR2 if !defined(EXPR1);

有关 Perl 运算符的文档,请参阅perlop


回到my $i //= '08';。这意味着

my $i;
$i = '08' if !defined($i);

$i将始终未定义。写会好很多

my $i = '08';
于 2012-12-12T19:05:20.730 回答
6

它是“定义或”运算符。

$i //= '08';

相当于:

$i = defined($i)? $i: '08';

它是在 Perl 5.10.0 中引入的,旧版本不支持。

于 2012-12-12T19:01:52.777 回答
5

$i //= '08'是一样的$i = defined($i) ? $i : '08'。它与 几乎相同$i ||= '08',翻译为$i = $i ? $i : '08'。现在,当您使用 声明变量时my,它被设置为undef. 因此,它将始终跟随08分支。另外,如果您想知道,该//运算符出现在 Perl v5.10 中;所以它会在旧的 Perls 上产生一个编译错误。

于 2012-12-12T19:03:45.680 回答
4

它几乎与 相同||,只是它检查是否$i已定义,而不仅仅是 true。

于 2012-12-12T19:01:31.280 回答