Veröffentlicht 3. Mai 201312 j 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.
8. Mai 201312 j 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' };
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.