MudGuard schrieb am 04.January.2009, 22:28:58 in der Kategorie pc.coding
Perl Regex
> $proj =~ m/\\/[a-z]+\\//i;
Das bewirkt, daß der gegebene Regex auf $proj gematcht wird. Das Ergebnis des Matches wird nicht aufgefangen.
$proj ist demzufolge komplett unverändert.
> Theoretisch sollte jetzt zweimal \"/GisLab/\" ausgegeben werden.
Nein, wenn das der Fall wäre, wäre der Perl-Interpreter defekt.
=~ bewirkt _KEINE_ Zuweisung, es bewirkt, daß der reguläre Ausdruck auf den String links vom =~ statt auf $_ angewandt wird.
Um den gematchten Stringteil zu bekommen, gibt es zwei Möglichkeiten:
1. Nach dem Match die Variable $0 auslesen:
$proj =~ m/\\/[a-z]+\\//i;
my $matchedString = $0;
2. im List-Kontext aufrufen und das Element mit Index 0 benutzen:
my @result = $proj =~ m/\\/[a-z]+\\//i;
my $matchedString = shift(@result);
Der List-Kontext ist dann interessant, wenn auch capturing () verwendet werden, da dann alle gefangenen Gruppen auf einen Schlag zugewiesen werden können.