Adrian Kousz: Reguläre Ausdrücke in Variablen

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.

  1. 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

    1. Vielen Dank Norbert,

      aber kann man dadurch nicht fremden Code einfügen. eval() ist doch gefährlich zum benutzen?!

      Gruss,
      Adi

    2. Sorry, noch was vergessen:

      wofür ist der backslash bei eval("\test ... ?

      Gruss

      1. 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