char mystring[] = "{ 1 2 3"
1
2
3
4
5
6
7
8
9
use strict;
use warnings;
use Text::Balanced qw( extract_delimited );
# wenn $text = "'467'123"; funktioniert es
my $text = "567'456'123"; # so nicht
my @extracted = extract_delimited($text, "'", '');
print $extracted[0], "\n", $extracted[1], "\n";
Guest JeffIch habe nun das Modul ein bisschen ausprobiert und eine Frage:
Warum funktionieren die Funktionen nicht, wenn vor dem zu ignorierendem Teil etwas davor ist?
1 2 3
my $text = "123 '456' 789"; my( undef, $post, $pre ) = extract_delimited( $text, qr/'/, qr/[^']*/ ); $text = ($pre || '') . $post;
2010-08-22T16:58:48 MatthiasWGuest JeffIch habe nun das Modul ein bisschen ausprobiert und eine Frage:
Warum funktionieren die Funktionen nicht, wenn vor dem zu ignorierendem Teil etwas davor ist?
Das klappt nicht, weil du explizit angibst, dass die Zeichenkette ('...') am Anfang des Textes stehen muss.
So sollte es klappen: (Ich habe die Doku nur kurz überflogen, es geht daher womöglich eleganter)
Code (perl): (dl )1 2 3my $text = "123 '456' 789"; my( undef, $post, $pre ) = extract_delimited( $text, qr/'/, qr/[^']*/ ); $text = ($pre || '') . $post;
Ansonsten könntest du dir meinen Alternativvorschlag mit regulären Ausdrücken ansehen. (Werde es gleich noch aktualisieren, da mir ähnliche Fehler passiert sind, wie dir ;-)
In deinem Skript scheinst du dir doppelte Arbeit zu machen - die Datei wird 2x analysiert - und außerdem übersieht es einige Fehler: } { kommt durch, weil die Anzahl an öffnenden gleich der Anzahl an schließenden geschweiften Klammern ist.
Darüber hinaus sieht es recht umständlich und aufgebläht aus. Die aktuelle Zeilennummer der zuletzt benutzten Datei findest du bspw. in $.. (perlvar)
MfG
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#!/usr/bin/perl use strict; use warnings; my( $code, @open ); while ( my $line = <> ) { $code .= $line; $code =~ s/'(?:\\.|[^'])*'|"(?:\\.|[^"])*"//g; # strip strings $code =~ s!/\*.*\*/!!g; # strip comments if ( $code !~ /["']|\/\*/ ) { # no open comment/string? $code =~ s!//.*!!; # strip eol-comments for ( split //, $code ) { push @open, $. if /\{/; if (/\}/) { warn "uncalled-for closing brace at line $.\n" unless @open; pop @open; } # if } # for $code = ''; } # if } # while warn @open ." open brace(s) not closed at line(s): ". join(", ", @open) ."\n" if @open;