wummelpummel Geschrieben 3. Mai 2013 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.
habbeda Geschrieben 8. Mai 2013 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' };
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden