2013-05-07 56 views
7

运行perl 5.12.4 在返回语句内或之前分配哈希时,函数的结果之间会产生不一致。最简单的例子是:Perl子程序返回中的哈希赋值变得奇怪

perl -e 'sub s1 { 
    my @a=qw/b 1 c 2 a 3 a 4/; 
    my %[email protected]; 
    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 %[email protected]; 
    return %[email protected] 
    } 
    print "@{[ s1()]}\n"' 
c 2 c 2 a c 

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

+2

证实。这确实很奇怪。但是当我在v14.2或v16.3上运行代码时,它的运行没有问题→它似乎已经修复,尽管我在perldeltas中看不到任何相关修复。 – amon 2013-05-07 05:24:41

+0

在perl 5.16.2上运行你的第二个例子,我得到了'b 1 c 2 a 4'' – friedo 2013-05-07 05:26:24

+0

这有点奇怪。我**可以**在我的一台机器上复制这个:'这是为darwin-thread-multi-2level构建的perl 5,版本12,subversion 4(v5.12.4)' – chrsblck 2013-05-07 06:24:02

回答

2

由于一个错误。它似乎已在5.14.0中得到修复。 (目前在5.12.4不在5.14.0呈现)

最小测试用例:

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

谢谢大家的回复。我接受我的网站需要将它的Perl版本更新到5.14。当软件基金会开始让步时,确认自己的理智总是很好的。 – 2013-05-07 20:03:02

+0

@RobN你的意思是更新至少5.14(5.18应该在一周内可用,尽管它可能会导致你的代码库中的微妙的错误,以显示他们的脸庞)。 – 2013-05-13 20:09:03