我找到了我需要的一些 Perl 代码的示例,但其中有一些我不认识的东西。
my $i //= '08';
我在任何地方都找不到任何参考!它似乎与以下内容相同:
my $i = '08';
我错过了什么吗?
我找到了我需要的一些 Perl 代码的示例,但其中有一些我不认识的东西。
my $i //= '08';
我在任何地方都找不到任何参考!它似乎与以下内容相同:
my $i = '08';
我错过了什么吗?
//=
运算符是or 'logical defined-or'运算符的赋值运算符版本。//
在my
变量声明的上下文中,变量最初是未定义的,因此它等同于赋值(最好写成my $i = '08';
)。不过,总的来说,
$i //= '08';
是以下的简写:
$i = (defined $i) ? $i : '08';
它记录在 Perl 运算符 ( perldoc perlop
) 中的两个地方(简而言之,在赋值运算符部分下,完整的在“逻辑定义或”部分)。它是在 Perl 5.10.0 中添加的。
简短的回答:它与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';
它是“定义或”运算符。
$i //= '08';
相当于:
$i = defined($i)? $i: '08';
它是在 Perl 5.10.0 中引入的,旧版本不支持。
$i //= '08'
是一样的$i = defined($i) ? $i : '08'
。它与 几乎相同$i ||= '08'
,翻译为$i = $i ? $i : '08'
。现在,当您使用 声明变量时my
,它被设置为undef
. 因此,它将始终跟随08
分支。另外,如果您想知道,该//
运算符出现在 Perl v5.10 中;所以它会在旧的 Perls 上产生一个编译错误。
它几乎与 相同||
,只是它检查是否$i
已定义,而不仅仅是 true。