perl - `$hash{$key} |= {}` 在 Perl 中做什么?

标签 perl initialization hash-reference

我正在与一些使用散列引用的 Perl 搏斗。

最后发现我的问题是这行:

$myhash{$key} |= {};

也就是说,“为 $myhash{$key} 分配一个对空哈希的引用,除非它已经有一个值”。

但是,取消引用它并尝试将其用作散列引用会导致有关将字符串用作散列引用的解释器错误。

将其更改为:
if( ! exists $myhash{$key}) {
  $myhash{$key} = {};
}

...使事情发挥作用。

所以我没有问题。但我很好奇发生了什么。

谁能解释一下?

最佳答案

Perl 有简写赋值运算符。 ||=由于 Perl 的特性是让逻辑运算符返回评估的最后一个值,因此运算符通常用于设置变量的默认值。问题是你用了|=这是按位或代替 ||=这是一个逻辑或。

从 Perl 5.10 开始,最好使用 //=反而。 //是逻辑定义或运算符,并且在当前值已定义但为假的极端情况下不会失败。

关于perl - `$hash{$key} |= {}` 在 Perl 中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/154900/

相关文章:

Perl 创建散列引用并一次从每个分支循环一个元素

perl - 如何创建仅在一个请求期间全局的 'globally' 范围变量?

Perl - 使用 DBD Oracle 时出现文件过多错误

perl - Mojo::DOM - XPath - 问题

ios - 快速关闭属性错误访问(EXC_BAD_ACCESS)

c - 带有 rand 的函数总是以相同的方式初始化矩阵

c - C 中的链表,最后一个节点指向 NULL?

perl - Perl 中的散列和散列引用有什么区别?

perl - Perl中上传文件的现代核心方法