wummelpummel Geschrieben 3. Mai 2013 Teilen Geschrieben 3. Mai 2013 Wir brauchen für statistische Überprüfungen unseres Perl-Codes die Möglichkeit, pod-Kommentare zu entfernen und durch die gleiche Anzahl an Newlines zu ersetzen. Wir haben also den String $code und der sieht so aus: sub foo { return 'bar' }; =head POD-Kommentar =cut sub bar { return 'foobar' }; Hier müssen wir jetzt den gesamten POD-Kommentar entfernen, so, dass aus dem Skript sub foo { return 'bar' }; sub bar { return 'foobar' }; wird. Warum? Um z.B. "dieses Modul wird mit 'use Modul;' eingebunden..." nicht in die "dieses Modul nutzt dies und das"-Statistiken mitzunehmen. Ich hatte dazu auf die Schnelle diesen Regex hier entwickelt: $code =~ s#(?:\R|^)(?:=.+?)\R=cut(?:\R|$)#"\n"x((${^MATCH}=~tr{\n|\r}{}))#segp; Nur leider funktioniert er nicht ganz bei Kommentaren mit mehreren Überschriften. Wenn wir also sub foo { return 'bar' }; =head POD-Kommentar =head2 POD-Kommentar 2 =cut sub bar { return 'foobar' }; haben, würde diese Regex daraus nur sub foo { return 'bar' }; =head POD-Kommentar sub bar { return 'foobar' }; machen. Wie kann man sowas als Regex realisieren? Einen extra Parser dafür möchte ich nicht schreiben und wir können auch PPI usw. nicht benutzen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
habbeda Geschrieben 8. Mai 2013 Teilen Geschrieben 8. Mai 2013 Auch wenn ich etwas länger gebraucht habe, um Deinen Regex verstehen zu können, kann ich darin keinen Fehler entdecken. Dein Beispiel funktioniert bei mir (Ubuntu, Perl 5.14.2) entsprechend einwandfrei: sub foo { return 'bar' }; sub bar { return 'foobar' }; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.