子程序返回中对哈希的 perl 赋值变得很奇怪

标签 perl hash return variable-assignment subroutine

运行 perl 5.12.4
在 return 语句中或事先分配哈希时,函数结果之间出现差异。最简单的例子是:

perl -e 'sub s1 {
  my @a=qw/b 1 c 2 a 3 a 4/;
  my %h=@a;
  return %h
  }
  print "@{[ s1()]}\n"'
c 2 a 4 b 1


perl -e 'sub s1 {
  my @a=qw/b 1 c 2 a 3 a 4/;
  my %h=@a;
  return %h=@a
  }
  print "@{[ s1()]}\n"'
c 2 c 2 a c

为什么在 return 语句(第二个示例)中(重新)分配给散列会破坏返回的散列?

最佳答案

因为一个bug。它似乎已在 5.14.0 中修复。 (存在于 5.12.4。不存在于 5.14.0)

最小测试用例:

perl -E"say %h = qw/b 1 c 2 a 3 a 4/"

关于子程序返回中对哈希的 perl 赋值变得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16411109/

相关文章:

python - 在列表列表中比较列表值的最佳方法是什么?

javascript - 使用柯里化(Currying)技术的返回语句

perl - print<< perl 中的 EOF- 打印 $

perl - 如何在 Perl 中 tar 多个文件?

perl - 此处正确关闭是什么意思

security - 使用 .NET Core 生成哈希

perl - 在Perl中切片嵌套的哈希

javascript - 从长字符串生成短哈希

c - 递归函数: why some compailers dont like return in conditions

JavaScript - 创建可链接函数的最佳方法是什么?