bieber+2007-08-02 10:36:41--was ich nicht verstehe ist die Konstruktion ?:
Du weißt doch, was Runde Klammern in einer Regex machen?
Runde Klammern veranlassen eine Regex dazu, das, was sie
matchen, in einer Variable abzuspeichern... du kennst doch
bestimmt die Variablen $1, $2, $3 etc.
?: in einer runden Klammer veranlasst eine Regex, den Match
nicht in einer dieser Variablen abzuspeichern. Beispiele:
my $string = 'foo bar baz';
$string =~ /(\w+) (\w+) (\w+)/;
print "1: $1, 2: $2, 3: $3\n";
$string =~ /(\w+) (?:\w+) (\w+)/;
print "1: $1, 2: $2\n";
print "3: is empty\n" unless $3;
1: foo, 2: bar, 3: baz
1: foo, 2: baz
3: is empty
Wie du sehen kannst, ist bei dem zweiten print baz in $2 und nicht in $3,
da ich die Regex angewiesen habe, den Match in der zweiten Klammer
nicht abzuspeichern.
foreach (@datei) {
next if /
^ # vom Anfang der Zeile
\s* # 0 oder alle Whitespaces
( # Anfang des Captures
?: # es soll nicht gecaptured werden
[#;] # # oder ;
| # ODER
$ # das Ende der Zeile
) # Ende des Captures
/x; # beachte keine Whitespaces
chomp; my @work = split /\s+/;
}
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.