2013-05-07 24 views
7

Running perl 5.12.4 Otrzymuję rozbieżności między wynikiem funkcji, gdy hasz jest przypisany w instrukcji return lub wcześniej. Najprostszym przykładem jest:przypisanie perla do skrótu w powrocie podprogramu staje się dziwne

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 

Dlaczego (re) przypisanie do mieszania w instrukcji return (2nd przykład) uszkodzony wracającą hash?

+2

potwierdzone. To naprawdę dziwne. Ale kiedy uruchomiłem kod na v14.2 lub v16.3 działał bez problemu → wygląda na to, że został naprawiony, chociaż nie widzę żadnej wzmianki o powiązanych poprawkach w perldeltas. – amon

+0

Uruchamiam twój drugi przykład na perlu 5.16.2, otrzymuję 'b 1 c 2 a 4' – friedo

+0

To trochę dziwne. Mogę ** powielić to na jednej z moich maszyn: 'To jest perl 5, wersja 12, subversion 4 (v5.12.4) zbudowane dla darwin-thread-multi-2level' – chrsblck

Odpowiedz

2

Z powodu błędu. Wygląda na to, że zostało naprawione w wersji 5.14.0. (. Obecne w 5.12.4 nie występuje w 5.14.0)

Minimal przypadek testowy:

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

Dziękuję wszystkim za odpowiedzi. Akceptuję, że moja witryna musi zaktualizować wersję Perla do wersji 5.14. Zawsze miło jest mieć potwierdzenie stanu zdrowia, gdy podstawy oprogramowania zaczynają ustępować. –

+0

@RobN Masz na myśli aktualizację do co najmniej 5.14 (5.18 powinna być dostępna za tydzień lub więcej, chociaż może powodować subtelne błędy w twojej bazie kodów, aby pokazać swoje twarze en-mass.) –