Reguläre Ausdrücke in Variablen
Adrian Kousz
- perl
Hallo zusammen!
Wieso kann man reguläre Ausdrücke nicht in Variablen schreiben, die dann ausgeführt werden?
Das untenstehende Programm gibt leider beide Male dasselbe aus...
______
my $regexp = "s/suchen/ersetzen/g";
if ($regexp =~ /s/.*/.*/.?/) { print "TRUE\n" }
else {print "FALSE\n" }
$test = "1suchen 2buchen 3kuchen 4suchen 5ersetzen\n";
print "$test\n";
$test =~ $regexp;
print $test;
______
Wenn ich jedoch den regulären Ausdruck direkt in die 2. unterste Zeile schreibe funktioniert das Ganze.
Wie kann man machen, dass RegExp aus Variablen ausgeführt werden?
Vielen Dank!
Adi
PS: Cool, dass man sich hier nicht registrieren muss!
Möchte ein Programm schreiben, mit dem man per RegExp Dateien umbenennen kann.
Moin, moin!
Nicht schön, aber so funktioniert es:
$test = "1suchen 2buchen 3kuchen 4suchen 5ersetzen\n";
$regexp = "s/suchen/ersetzen/g";
eval("$test =~ $regexp");
print $test;
Alles klar?
Norbert
Vielen Dank Norbert,
aber kann man dadurch nicht fremden Code einfügen. eval() ist doch gefährlich zum benutzen?!
Gruss,
Adi
Sorry, noch was vergessen:
wofür ist der backslash bei eval("\test ... ?
Gruss
Moin, moin!
"aber kann man dadurch nicht fremden Code einfügen. eval() ist doch gefährlich zum benutzen?!"
Man kann fremden Code einfügen, denn den kann man ja in der Variablen unterbringen. Aber das ist in der Tat riskant.
"wofür ist der backslash bei eval("\test ... ?"
Da muß $test stehen. Ohne Backslash würde der Inhalt der Variablen $test in den auszuwertenden Ausdruck eingesetzt werden. Gewollt ist aber, das der Inhalt der Variablen verändert wird. Der Backlash sorgt dafür, dass das $-Zeichen zunächst als ganz normales Zeichen angesehen wird und nicht als Beginn einer Variablenbezeichnung.
Alles klar?
Norbert