Thread Array, Match und $1
(14 answers)
Opened by IceRage at 2011-09-22 22:54
also gut, hier eine demo:
Code: (dl
)
1 $ perl -wE' hier mit einer extra my() variable: Code: (dl
)
1 $ perl -wE' ich kann die feinheiten der beiden leider auch nicht erklären (*), aber es ist auf jeden fall ein resultat des globalen matchings. die ergebnisse "a b" und "d e" im zweiten beispiel erklären sich übrigens so, dass $1 nicht neu gesetzt wird, sondern noch vom alten matching da ist, aber nun leider in $string eine neue variable steht. $1 ist nämlich kein einfacher string, sondern merkt sich den offset und die länge des matches. also nochmal, globales matching in skalarem kontext will man meist nur in einer while-schleife, also bis der string abgearbeitet ist. edit: (*) der unterschied ist, dass in beiden fällen in schleife 3 und 4 $1 nicht neu gesetzt wird, aber im zweiten beispiel wegen des my() auf die neue variable angewendet wird. edit2: wenn du beim 2. beispiel das /g weglässt, bekommst du dasselbe ergebnis wie in beispiel 1. fazit: 1. immer erst den erfolg des matchings abfragen und nur dann $1 verwenden. 2. globales matching im skalaren kontext ist in den meisten fällen nicht gewollt. Last edited: 2011-09-23 15:03:35 +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 |