Perl子程序返回哈希赋值出现问题

7

运行perl 5.12.4 当在返回语句中或之前分配哈希时,函数结果存在差异。最简单的示例是:

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

为什么在返回语句中重新赋值哈希表(第二个例子)会破坏返回的哈希表?

2
确认过了,这确实很奇怪。但是当我在v14.2或v16.3上运行代码时却没有任何问题→看起来已经修复了,尽管我在perldeltas中没有看到任何相关的修复提及。 - amon
在 perl 5.16.2 上运行您的第二个示例,我得到了 b 1 c 2 a 4 - friedo
这有点奇怪。我可以在我的一台机器上复制这个:This is perl 5, version 12, subversion 4 (v5.12.4) built for darwin-thread-multi-2level - chrsblck
哈希/哈希元素在列表上下文中的返回一直有点奇怪。 - ysth
1个回答

2

由于一个错误。它似乎已在5.14.0中得到修复(存在于5.12.4中,不存在于5.14.0中)

最简测试用例:

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

感谢各位的回复。我承认我的网站需要将Perl版本更新到5.14。当软件基础开始崩溃时,得到确认总是令人愉快的。 - Rob N
@RobN 你的意思是升级到至少5.14(5.18应该在一周左右可用)。尽管这可能会导致你的代码库中出现微妙的错误,但它们会大规模地显露出来。 - Brad Gilbert

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