Warum Warnung in error_log?!?
Dirk
- perl
0 Markus Pitha0 Dirk
1 Christian Kruse
Hallo,
ich habe eine Warnmeldung in meiner error_log, die ich nicht ganz nachvollziehen kann: In einer Subroutine eines Perl-Scripts hab ich eine split-Anweisung stehen mit den Flags "gm" hinter dem regulären Ausdruck. Beim Aufruf des Scripts ohne Parameter wird diese Subroutine (garantiert) nicht ausgeführt, dennoch steht in der error_log: "Use of /g modifier is meaningless in split at...", und die Zeilenangabe bezieht sich auf diese Subroutine. Daß in der zu splittenden Liste nix drinsteht zu dem Zeitpunkt, ist klar, aber die Routine wird ja gar nicht ausgeführt.
Kann mir das mal jemand erklären? Das Script selbt läuft einwandfrei.
Gruß, Dirk
Hallo,
es wird vom Perl Interpreter zuerst überprüft, ob das Script überhaupt lauffähig ist. Wie denn sonst sollte er mögliche Fehler finden?
"Use of /g modifier is meaningless in split at...",
Ich glaube, dass diese Warnung selbsterklärend ist.
Markus.
"Use of /g modifier is meaningless in split at...",
Ich glaube, dass diese Warnung selbsterklärend ist.
Ja, aber wenn in dem zu splittenden String was drinsteht, ist der modifier nun mal nicht meaningless, sondern sogar wichtig. Insofern versteh ich die Warnung nicht.
你好 Dirk,
Kann mir das mal jemand erklären? Das Script selbt läuft einwandfrei.
Es gibt bei der Interpretierung eines Scriptes verschiedene Phasen. Eine
Phase ist die Compile-Zeit des Scriptes, eine andere die Laufzeit. Manche
Fehler/Probleme können, wenn man nicht erheblichen Aufwand betreiben will,
nur zur Laufzeit entdeckt werden und manche können zur Compile-Zeit
entdeckt werden. Ein "meaningless modifier" bei einem regulären Ausdruck
ist dabei ein ganz typisches Beispiel für ein Problem, dass zur
Compile-Zeit entdeckt werden kann. Das heisst, der Interpreter muss gar
nicht erst bis zu der Code-Stelle laufen, um das Problem zu erkennen,
sondern er erkennt es bereits bei der Kompilierung.
再见,
克里斯蒂安
Ein "meaningless modifier" bei einem regulären Ausdruck
ist dabei ein ganz typisches Beispiel für ein Problem, dass zur
Compile-Zeit entdeckt werden kann. Das heisst, der Interpreter muss gar
nicht erst bis zu der Code-Stelle laufen, um das Problem zu erkennen,
sondern er erkennt es bereits bei der Kompilierung.
hmm...also ist das "g-flag" hinter einem reg. Ausdruck in einer split-Anweisung _generell_ meaningless? Oder wie soll ich das jetzt verstehen?!?
Dirk
Hi,
hmm...also ist das "g-flag" hinter einem reg. Ausdruck in einer split-Anweisung _generell_ meaningless? Oder wie soll ich das jetzt verstehen?!?
Was macht denn split?
Es teilt einen String an _allen_ [*] Fundstellen auf, an denen der Regex gefunden wird.
Was willst Du da noch mit dem g-flag, das ja bewirkt, daß alle Fundstellen berücksichtigt werden?
[*] Ausnahme: es wird eine niedrigere Anzahl n gewünscht. Aber dann wird eben an _allen_ Fundstellen bis zur n-ten (oder (n-1)-ten - bin jetzt zu faul, näher darüber nachzudenken) aufgeteilt.
cu,
Andreas
Was macht denn split?
Es teilt einen String an _allen_ [*] Fundstellen auf, an denen der Regex gefunden wird.
Was willst Du da noch mit dem g-flag, das ja bewirkt, daß alle Fundstellen berücksichtigt werden?
Jepp, hab's verstanden. Ich war der (irrigen) Annahme, daß nur an der ersten Fundstelle gesplittet wird, wenn das g-Flag nicht gesetzt wird.
Danke, Dirk