Thread Variabler Regex mit komplizierten Zeichen
(15 answers)
Opened by marky at 2012-04-08 13:42
der modifier /e bewirkt, dass die rechte seite der substitution als code aufgerufen wird, nicht als string (nicht zu verwechseln mit einem "echten" eval).
eine substitution s/x/y/ bedeutet: ersetze das, was auf die regex /x/ matcht, mit dem string "y" s/x/$y/ bedeutet: ersetze das, was auf die regex /x/ matcht, mit dem string "$y" (also dem inhalt von $y interpoliert) s/x/funktion($y)/e bedeutet: ersetze das, was auf die regex /x/ matcht, mit dem ergebnis funktion($y). der code wird also ausgeführt. s/x/$y/e bedeutet: ersetze das, was auf die regex /x/ matcht, mit $y (also der variable $y bzw ihrem inhalt). so gesehen ist beim letzten beispiel das /e eine no-op, einmal steht $y in anführungszeichen, das andere mal nicht, das ist wie: $x = $y; vs. $x = "$y"; (mal von sonderfällen wie string-overload von objekten abgesehen) in keinem der fälle wird der inhalt der variable $y selbst interpretiert. (das würde erst bei einem doppelten /ee passieren, was dann nämlich tatsächlich ein eval() aufruft) der modifier /o bewirkt, dass die regex auf der linken seite nur beim ersten mal kompiliert wird, auch wenn sich die variable ändert. ohne /o: Code: (dl
)
1 $ perl -wE' mit /o: Code: (dl
)
1 $ perl -wE' beim zweiten durchlauf der schleife enthält $re zwar "bar", aber die regex wird nur einmal kompiliert und matcht daher auf "foo" vom ersten durchlauf. \Q bewirkt, dass nachfolgende sonderzeichen escaped werden. "\Qfoo bar $baz" ist dasselbe wie quotemeta("foo bar $baz") Last edited: 2012-04-08 16:11:47 +0200 (CEST) Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wie frage ich & perlintro brian's Leitfaden für jedes Perl-Problem |