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.

Comments

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.