我正在与一些使用散列引用的 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/