Hallo,
die runden Klammern haben eine Sonderfuktion im regulären Ausdruck (Regex), die hier bei Deinem Beispiel greift. Damit wird das eingefangen, was innerhalb der Klammern steht.
Wenn Du
/$s/ verwendest, wird das, was in
$s steckt als Regex gewertet und die Klammern bekommen eine Sonderbedeutung.
Beispiele:
Wenn Du nur prüfen willst, ob zwei Variablen identische Strings enthalten, verwende
eq:
$s="a (b) c";
$_=$s;
if ( $_ eq $s) {
print "Found it!\n";
} else {
print "Not found\n";
}
Wenn Du per Regex prüfen willst, aber keine Interpretation der Sonderzeichen wünschst:
$s="a (b) c";
$_=$s;
# alles zwischen \Q und \E wird als String gewertet, allerdings werden Variablen interpoliert
if ( /\Q$s\E/ ) {
print "Found it!\n";
} else {
print "Not found\n";
}
Wenn Du die einfangende Klammer nutzen willst, musst Du bedenken, dass sie im Regex zusätzlich zum "normalen" Text angegeben werden muss:
$s="a (b) c";
$_="a b c";
if ( /$s/ ) {
# Das eingefangene der Klammer steht nun in $1
print "Found it: $1!\n";
} else {
print "Not found\n";
}
Mehr dazu findest Du in der dazugehörigen Dokumentation:
perlretut
perlre
perlrequick
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!