Was ist der Unterschied in der verzögerten Auswertung von Code in Subroutinen für Perl 5.8 vs. 5.10 und 5.12?

8

Dieses Bit des Codes verhält sich unter Perl 5.8 anders als unter Perl 5.12:

%Vor%

Wenn ich es unter 5.8 ausführe, erhalte ich einen Fehler, obwohl ich niemals die Division ausführe:

%Vor%

Unter Perl 5.10.1 verhält es sich wie unter 5.12:

%Vor%

Ich erhalte die gleichen Ergebnisse mit einer benannten Unterroutine, z. B.

%Vor%

Ich sehe nichts in der perl5100delta-Kapsel. Ist das eine undokumentierte Veränderung? Eine unbeabsichtigte Nebenwirkung einer anderen Veränderung? (Zur Erinnerung, ich denke 5.10 und 5.12 machen das Richtige.)

    
Brock 04.05.2010, 18:59
quelle

1 Antwort

17

Ich glaube, das war geplant, und ich sehe das erwähnte in perl5100delta.pod :

  

Ausnahmen beim konstanten Falten

     

Die konstante Faltungsroutine ist jetzt   eingewickelt in einen Ausnahmehandler, und   wenn das Falten eine Ausnahme auslöst (z   als Versuch, 0/0) zu bewerten, Perl   jetzt behält das aktuelle optree, eher   als das ganze Programm abzubrechen.   Ohne diese Änderung würden Programme   nicht kompilieren, wenn sie Ausdrücke hatten   das erzeugte Ausnahmen,   obwohl diese Ausdrücke in waren   Code, der nie erreicht werden konnte   Laufzeit. (Nicholas Clark, Dave   Mitchell)

Es hat nur mit der Exception dividiert durch Null zu tun, die nicht zu einem Abbruch der Kompilierungsstufe führt.

    
Evan Carroll 04.05.2010, 19:18
quelle

Tags und Links