【发布时间】: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