【问题标题】:perl assignment to hash in subroutine return gets weirdperl 在子例程返回中对哈希的赋值变得很奇怪
【发布时间】:2013-04-30 22:31:04
【问题描述】:

运行 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 语句(第二个示例)中(重新)分配给哈希会破坏返回的哈希?

【问题讨论】:

  • 已确认。这真的很奇怪。但是当我在 v14.2 或 v16.3 上运行代码时,它运行时没有问题 → 它似乎已经修复,尽管我在 perldeltas 中看不到任何相关修复的提及。
  • 在 perl 5.16.2 上运行您的第二个示例,我得到 b 1 c 2 a 4
  • 这有点奇怪。我可以在我的一台机器上复制这个:This is perl 5, version 12, subversion 4 (v5.12.4) built for darwin-thread-multi-2level
  • 在列表上下文中返回散列/散列元素分配总是有点不稳定

标签: perl hash return variable-assignment subroutine


【解决方案1】:

因为一个错误。它似乎已在 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。当软件基础开始让位时,确认一个人的理智总是很好的。
  • @RobN 你的意思是至少更新到 5.14(5.18 应该在一周左右的时间内可用。虽然它可能会导致你的代码库中出现细微的错误,以显示他们的面孔。)跨度>
猜你喜欢
  • 2014-07-02
  • 2013-11-20
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 2017-11-07
  • 1970-01-01
相关资源
最近更新 更多