Mittwoch, 22. Mai 2013

Perl 5.18: Ein kleiner, aber nachhaltiger Schritt | heise Developer

Perl 5.18: Ein kleiner, aber nachhaltiger Schritt | heise Developer

Eine der mit 5.18 kommenden Änderungen:

5.18 löst die uneinheitliche Behandlung von $_ in diesem (s.u.!) Zusammenhang, wird aber bestimmt "laufende Programme ins Stolpern bringen":

  • Befehle wie given und Kernmodule verwenden wieder local $_ statt my $_.
Wenn durchgehend local $_ verwendet wird (der Normalfall in Perl), dann lässt sich das auch ordentlich schachteln, wenn in manchen Kontexten stattdessen my $_ (also ein "lexikalisches $_") verwendet wird, dann führt das zu unerwarteten Verdeckungen ("override").

Man sieht also z.B. in einem try/catch (aus Try::Tiny) innerhalb eines given/when ganz unerwartet das (lexikalische) $_ aus dem when statt des (local) $_ aus dem catch. Eines der Caveats in der Dokumentation von Try::Tiny beschreibt das Problem und auch den Work-Around.

Mit solchem Code hatte ich es kürzlich mit 5.14 in einem Projekt zu tun.

Keine Kommentare: