Perl中的//=是什么?

jgovgodb  于 2022-12-19  发布在  Perl
关注(0)|答案(5)|浏览(618)

我找到了一个我需要的Perl代码的例子,但是里面有一些我不认识的东西。

my $i //= '08';

我在任何地方都找不到对此的任何引用!它似乎与以下内容相同:

my $i = '08';

我错过什么了吗?

1cklez4t

1cklez4t1#

//=运算符是//或“逻辑定义或”运算符的赋值运算符版本。
my变量声明的上下文中,变量最初是未定义的,因此它 * 是 * 等价于赋值(并且最好写成my $i = '08';)。

$i //= '08';

是以下内容的缩写:

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

它在Perl操作符(perldoc perlop)中的两个地方被记录下来(简洁地在赋值操作符部分,完整地在'逻辑定义的或'部分)。

eit6fx6z

eit6fx6z2#

它是"定义或"运算符。

$i //= '08';

相当于:

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

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

6ie5vjzr

6ie5vjzr3#

简短回答:和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';   # no `my`
vcudknz3

vcudknz34#

$i //= '08'$i = defined($i) ? $i : '08'相同。它几乎与$i ||= '08'相同,$i ||= '08'转换为$i = $i ? $i : '08'。现在,当您使用my声明变量时,它将被设置为undef。因此,它将始终跟随08分支。另外,如果您想知道,//操作符出现在Perl v5.10中;因此它会在旧版Perl上生成编译错误。

bhmjp9jg

bhmjp9jg5#

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

相关问题