Thread regexp funktioniert erst beim zweiten Lauf (13 answers)
Opened by dukeofnukem at 2007-06-20 13:23

betterworld
 2007-06-20 23:39
#77690 #77690
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Das ist eigentlich ganz klar... /g sorgt dafuer, dass alle Treffer nacheinander zurueckgegeben werden.  Wenn dann der letzte Treffer kam, wird nichts mehr zurueckgegeben.  Gedacht ist das primaer fuer Schleifen:
Code: (dl )
1
2
3
while ('test' =~ /./g) {
   print "$&\n";
}

Auch in diesem Code gibt der Regex irgendwann falsch zurueck, und zwar beim fuenften Mal (in Deinem Fall beim zweiten Mal).
Die Information wird hierbei im String gespeichert und nicht im Regex, daher funktioniert es auch ohne Schleife.  Wenn Du diese Funktionalitaet nicht benoetigst, macht es eh keinen Sinn, /g zu benutzen.  Normalerweise benutzt man das nur im Schleifenkopf oder im Listenkontext (oder bei s///g).

Zitat aus perlop:
Quote
In scalar context, each execution of "m//g" finds the next match,
              returning true if it matches, and false if there is no further
              match.
\n\n

<!--EDIT|betterworld|1182368693-->

View full thread regexp funktioniert erst beim zweiten Lauf