2013-05-07 68 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