什么是// = Perl?

时间:2012-12-12 18:56:37

标签: perl

我找到了一些我需要的Perl代码的示例,但它有一些我无法识别的内容。

my $i //= '08';

我在任何地方都找不到任何参考!它似乎与:

相同
my $i = '08';

我错过了什么吗?

5 个答案:

答案 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,而不是真实。