6

在 Perl 中,||=以下示例中的 operator 是什么意思?

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

3 回答 3

7

a ||= b类似于a = a || b,所以:

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

类似于:

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

根据 ikegami 的评论,不同之处在于a ||= b;只评估a一次,并且评估abefore b。这在何时a是神奇的或不是标量时很重要。

于 2013-06-02T14:37:40.067 回答
5
$sheet -> {MaxCol} ||= $sheet -> {MinCol};

具有相同的效果

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

或者

$sheet->{MaxCol} = $sheet->{MinCol} unless $sheet->{MaxCol};
于 2013-06-02T14:43:14.497 回答
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 to $b 次
  • &=, |=, ^=, 按位与, 或, XOR
  • &.=, |.=, ^.=,&=等,但操作数被强制解释为字符串
  • <<=,>>=用于按位移位
  • $a &&= $b是“如果 $a 评估为真,则将其设置为 $b”。
  • ||=是“如果 $a 评估为假(空字符串、值零或未定义),则将 $a 设置为 $b。如果 0 或空字符串不能作为有效输入,这是设置默认值的好方法。
  • \\=,我最喜欢的,除了它不会将 $a 设置为 $b 之外几乎相同,||=即使 $a 为 0 或空字符串。
于 2020-07-06T13:50:00.987 回答