Thread Capturing und $1
(17 answers)
Opened by defun at 2008-07-25 02:38
Ich habe jetzt insgesamt mindestens einen Tag damit zugebracht, einen Fehler zu finden, der wirklich einen mini-winzigen Auslöser hatte. Der Fehler war folgender Natur:
Wenn ich vor ein Stück Code einen Regex wie Code (perl): (dl
)
'f' =~ m/(.)/; gestellt habe, produzierte er einen Fehler (keinen Perl-Fehler, sondern einen von mir definierten). Sobald der Regex weggelassen wurde, bzw. der Regex keine Capturing-Klammern mehr enthielt, lief der Code fehlerfrei. Um den Fehler so weit einzugrenzen, habe ich natürlich allein schon Stunden gebraucht. Fazit: Die Tatsache, dass $1 gesetzt war, führte zu einem sehr schwer findbaren Fehler, den ich noch nicht beschreiben möchte. Dieser Thread soll nun dazu dienen, mir zu zeigen, ob ich einfach zu dämlich war, oder ob auch DU über die Falle gestolpert wärst, die in meinem Code verborgen war. Daher meine Frage: Wenn du einen Regex mit Capture-Klammern hast, von dem du weißt, dass er ausgeführt wird -- bist du dir dann sicher, dass ein $1 direkt hinter diesem Regex (also z.B. in der nächsten Zeile und im gleichen Kontext) entweder einen neuen Wert bekommt, oder auf undef gesetzt wird? Oder anders gefragt: Fällt dir irgendein Weg ein, das Setzen von $1 zu vermeiden? Wenn es ein paar Antworten gibt, "löse ich das Rätsel auf", falls es dann noch nötig ist. Ich habe mit Perl 5.8.8 gearbeitet, wie es mit anderen Versionen aussieht, kann ich gerade nicht ausprobieren. |