操作符 ||= 的含义是什么?

6
在Perl中,以下示例中运算符||=的含义是什么?
$sheet -> {MaxCol} ||= $sheet -> {MinCol};

http://perldoc.perl.org/perlop.html - Oliver Charlesworth
3个回答

7

a ||= ba = a || b类似,因此:

$sheet->{MaxCol} ||= $sheet->{MinCol};

类似于:

$sheet->{MaxCol} = $sheet->{MaxCol} || $sheet->{MinCol};

根据ikegami的评论,区别在于a ||= b;只对a求值一次,并且在对b求值之前对a求值。当a是神奇的或不是标量时,这很重要。

5
$sheet -> {MaxCol} ||= $sheet -> {MinCol};

具有相同的效果,就像

if (!$sheet->{MaxCol}) { $sheet->{MaxCol} = $sheet->{MinCol}; }

或者
$sheet->{MaxCol} = $sheet->{MinCol} unless $sheet->{MaxCol};

0
如其他答案所述:这是 Perl 提供的缩写之一。 $a += $b 几乎与 $a = $a + $b 相同。
为什么几乎?因为访问 $a 的次数可能会导致不同的副作用。例如,如果 $a 实际上是一个绑定变量。绑定变量/哈希/数组/文件句柄可以让您在读取和写入存储(无论是 Perl 占用的 RAM 还是数据库文件或对传感器(温度、湿度等)进行简单访问)时获得钩子。
有关更多信息,请参见 perldoc -f tie。
您可能已经想象到这可能非常强大,类似于 Unix 的“一切皆文件”访问各种设备的方式,通过一个相当统一和通用的接口...
Perl 中还有其他缩写:
  • $a **= $b(例如 $a 是 $b 的幂),
  • +=-=*//= --- 就像它们的字面意思一样,
  • %= 取模
  • $a x= $b,将字符串 $a 重复 $b 次
  • &=, |=, ^=,按位与、或、异或
  • &.=|.=^.=,与 &= 等相同,但操作数被强制解释为字符串
  • <<=>>= 用于按位移位
  • $a &&= $b 表示“如果 $a 为真,则将其设置为 $b”。
  • ||= 表示“如果 $a 为假(空字符串、值为零或未定义),则将 $a 设置为 $b。这是一个很好的方法,如果 0 或空字符串不能作为有效输入,则设置默认值。
  • \\= 是我最喜欢的,几乎与 ||= 相同,只是即使 $a 是 0 或空字符串,它也不会将 $a 设置为 $b。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接