在Perl中,以下示例中运算符||=
的含义是什么?
$sheet -> {MaxCol} ||= $sheet -> {MinCol};
答案 0 :(得分:7)
a ||= b
与a = a || b
类似,所以:
$sheet->{MaxCol} ||= $sheet->{MinCol};
类似于:
$sheet->{MaxCol} = $sheet->{MaxCol} || $sheet->{MinCol};
根据ikegami的评论,区别在于a ||= b;
仅评估a
一次,并在a
之前评估b
。当a
是神奇的或不是标量时,这很重要。
答案 1 :(得分:5)
$sheet -> {MaxCol} ||= $sheet -> {MinCol};
与
具有相同的效果if (!$sheet->{MaxCol}) { $sheet->{MaxCol} = $sheet->{MinCol}; }
或
$sheet->{MaxCol} = $sheet->{MinCol} unless $sheet->{MaxCol};
答案 2 :(得分:0)
正如其他答案所说:这是Perl提供的速记之一。
$a += $b
与$a = $a + $b
几乎相同。
为什么差不多?好吧,访问$ a的次数可能会导致不同的副作用。例如,如果$ a实际上是一个绑定变量。绑定变量/哈希/数组/文件句柄可以使您对存储进行读取和写入(例如Perl占用的RAM或某个地方的数据库文件或对传感器(温度,湿度,...)的简单访问)
有关更多信息,请参见perldoc -f tie。
您可能已经可以想象到,它非常强大,与Unix的“一切都是文件”一样,可以通过一个相当统一和通用的界面访问各种设备...
Perl中还有其他简写方式:
$a **= $b
(在$ a中,$ a等于$ b的幂),+=
,-=
,*/
,/=
---就像锡罐上所说的一样,%=
取模$a x= $b
,在$ a tor $ b中重复该字符串&=, |=, ^=
,按位和,或XOR &.=
,|.=
,^.=
,相同的&=
等,但是强制将操作数解释为字符串<<=
,>>=
用于按位移位$a &&= $b
是“如果$ a计算为真,则将其设置为$ b”。||=
是“如果$ a计算为假(空字符串,值为零或未定义),请将$ a设置为$ b。这是一种设置默认值的好方法,如果0或空字符串不能为有效输入。 \\=
与||=
几乎相同,除了即使$ a为0或空字符串,它也不会将$ a设置为$ b。