Dirk: Warum Warnung in error_log?!?

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

  1. 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.

    --
    http://www.apostrophitis.at
    Wenn ich ein toller Programmierer währe, könnte ich vieleicht sogar Packete nach einem gewissen Standart kompelieren...
    Vieleicht progge ich aber auch eine tolle Gallerie, die dann hoffentlich funzt.
    1. "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.

  2. 你好 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.

    再见,
     克里斯蒂安

    --
    Neue Hardware eingebaut | Der dritte mir bekannte Block-Nutzer
    Es gibt keinen Ort, wo der Geist zu finden waere. Er ist wie die Fussspuren der Voegel am Himmel.
    http://wwwtech.de/
    1. 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

      1. 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

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. 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