我找到了一个我需要的Perl代码的例子,但是里面有一些我不认识的东西。
my $i //= '08';
我在任何地方都找不到对此的任何引用!它似乎与以下内容相同:
my $i = '08';
我错过什么了吗?
1cklez4t1#
//=运算符是//或“逻辑定义或”运算符的赋值运算符版本。在my变量声明的上下文中,变量最初是未定义的,因此它 * 是 * 等价于赋值(并且最好写成my $i = '08';)。
//=
//
my
$i //= '08';
是以下内容的缩写:
$i = (defined $i) ? $i : '08';
它在Perl操作符(perldoc perlop)中的两个地方被记录下来(简洁地在赋值操作符部分,完整地在'逻辑定义的或'部分)。
perldoc perlop
eit6fx6z2#
它是"定义或"运算符。
相当于:
$i = defined($i)? $i: '08';
它是在Perl 5.10.0中引入的,旧版本不支持它。
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在这种情况下总是未定义的。
$i
但是密码应该是
$i //= '08'; # no `my`
vcudknz34#
$i //= '08'与$i = defined($i) ? $i : '08'相同。它几乎与$i ||= '08'相同,$i ||= '08'转换为$i = $i ? $i : '08'。现在,当您使用my声明变量时,它将被设置为undef。因此,它将始终跟随08分支。另外,如果您想知道,//操作符出现在Perl v5.10中;因此它会在旧版Perl上生成编译错误。
$i //= '08'
$i = defined($i) ? $i : '08'
$i ||= '08'
$i = $i ? $i : '08'
undef
08
bhmjp9jg5#
它几乎与||相同,只是它检查是否定义了$i,而不仅仅是true。
||
5条答案
按热度按时间1cklez4t1#
//=
运算符是//
或“逻辑定义或”运算符的赋值运算符版本。在
my
变量声明的上下文中,变量最初是未定义的,因此它 * 是 * 等价于赋值(并且最好写成my $i = '08';
)。是以下内容的缩写:
它在Perl操作符(
perldoc perlop
)中的两个地方被记录下来(简洁地在赋值操作符部分,完整地在'逻辑定义的或'部分)。eit6fx6z2#
它是"定义或"运算符。
相当于:
它是在Perl 5.10.0中引入的,旧版本不支持它。
6ie5vjzr3#
简短回答:和
my $i = '08';
是一样的。首先,我们来看一下
$i //= '08';
等于
只不过EXPR1只计算一次。这是一种方便的编写方式
有关Perl操作符的文档,请参见perlop。
回到
my $i //= '08';
。这意味着但是
$i
在这种情况下总是未定义的。但是密码应该是
vcudknz34#
$i //= '08'
与$i = defined($i) ? $i : '08'
相同。它几乎与$i ||= '08'
相同,$i ||= '08'
转换为$i = $i ? $i : '08'
。现在,当您使用my
声明变量时,它将被设置为undef
。因此,它将始终跟随08
分支。另外,如果您想知道,//
操作符出现在Perl v5.10中;因此它会在旧版Perl上生成编译错误。bhmjp9jg5#
它几乎与
||
相同,只是它检查是否定义了$i
,而不仅仅是true。