我找到了一些我需要的Perl代码的示例,但它有一些我无法识别的内容。
my $i //= '08';
我在任何地方都找不到任何参考!它似乎与:
相同my $i = '08';
我错过了什么吗?
答案 0 :(得分:46)
//=
运算符是//
或assignment operator运算符的'logical defined-or'版本。
在my
变量声明的上下文中,变量最初是未定义的,因此 等同于赋值(并且更好地写为my $i = '08';
)。但总的来说,
$i //= '08';
是:
的简写$i = (defined $i) ? $i : '08';
Perl运算符(perldoc perlop
)中记录了两个地方(简要介绍了赋值运算符部分,完整地记录在'logical defined-or'部分)。它是在Perl 5.10.0中添加的。
答案 1 :(得分:6)
简短回答:它与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';
答案 2 :(得分:5)
它是“定义或”运算符。
$i //= '08';
相当于:
$i = defined($i)? $i: '08';
它是在Perl 5.10.0中引入的,旧版本不支持。
答案 3 :(得分:5)
$i //= '08'
与$i = defined($i) ? $i : '08'
相同。
它与$i ||= '08'
几乎相同,后者转换为$i = $i ? $i : '08'
。
现在,当您使用my
声明变量时,它会设置为undef
。因此,它将始终遵循08
分支。
另外,如果您想知道,//
运算符出现在Perl v5.10中;所以它会在较旧的Perls上生成编译错误。
答案 4 :(得分:2)
它与||
几乎相同,只是它检查是否定义了$i
,而不是真实。