Thread $1 bei Regex
(23 answers)
Opened by Gast at 2006-01-12 16:04
@Crian
Du schreibst: um dir die Unlogik aufzuzeigen... Meine Antwort: So unlogisch find ich es gar nicht ohne eine if-Abfrage arbeiten zu wollen Das zeigt ja auch deine versteckte if-Abfrage :-) my @data = qw/ei nur bein flur stein/; for (@data) { m~(ei)~ && print "$_ -> [$1]\n"; } Siehst du da noch ein if geschrieben? @Strat Du schreibst: $1 wird durch den nicht erfolgreichen match nicht geleert, sondern es bleibt der inhalt vom letzten erfolgreichen match drinnen stehen. Mein Kommentar: Genau das ist das Problem. Aber wie verhält sich denn dann $& ? $& wird doch auch mit dem Treffer gefüllt wenn eine Übereinstimmung besteht! Aber es gibt auch nichts aus wenn es nichts gefunden hat! Auch nicht den Wert den es in einen vorherigen Match schon mal gespeichert hat. Mein Fehler war wohl diese beiden Systemvariablen eins zu eins zu vergleichen. Die Beiden verhalten sich doch dann unterschiedlich da $1 wirklich dafür gedacht ist den Wert zu behalten. Die Lösung mit unless find ich dann auch recht elegant! @Taulmarill Du schreibst: Crian hat durch seine fragestellung den ansatz, eine entscheidung zu treffen (gebe ich $1 aus oder nicht) ohne die entscheidung treffen zu wollen (kein if benutzen) kritisiert.. Meine Antwort: Ich denke mit dem versteckten if hat Crian ja auch schon die Antwort auf meine ursprüngliche Frage gegeben. Es geht doch auch ohne if :-) foreach(@Datei){m/^ein (\w+) / && print "$_ -> [$1]\n";} Du schreibst: ich würde den regex so schreiben: /^ein ([^ ]+)/ Meine Antwort: Gefällt mir auch besser :-) Auch die Variante von Strat /^ein\s+(\b\S+\b)/ is auch nicht schlecht. Beim nächsten Reg wird alles besser :-) Du schreibst: die frage bleibt. warum willst du kein if benutzen? was genau willst du erreichen? ich denke die meisten aspekte deiner frage wurden beleuchtet Meine Antwort: Weiss auch nicht genau (bläht irgendwie den Text visuell auf). Finds schöner wenn weninger Text da steht. Muss aber ja nicht gleich total reduziert sein wie bei der Lösung von Crian m~(ein)~ , obwohl da könnte man sich schon daran gewöhnen!!! Also erstmal vielen Dank an Alle Gruss rommi |