eval & reguläre Ausdrücke mit @
Felix Schwarz
- perl
0 Cheatah
Hallo.
Ich habe ein Problem, dass ich trotz Konsultierung der einschlaegigen Buecher (Kamel~, Koch~) nicht loesen konnte:
Ich will einen dynamischen, regulaeren Ausdruck in ein Perl-Programm einfuegen.
Folgender Code laeuft wunderbar:
$string = "Forumsbesucher";
$compare = "=~ /forum/i";
eval "if ($string $compare) { print 'Erfolg!\n'; }";
Bei $string = "webmaster@forum.de"; gibt es aber folgende Fehlermeldung:
Literal @forum now requires backslash at t.pl line
2, within string
Execution of t.pl aborted due to compilation errors.
Daraufhin habe ich versucht, das @ zu quoten:
$string = "webmaster@forum.de"; oder
$string = quotemeta ("webmaster@forum.de");
was aber beides keinen Erfolg brachte.
Es geht nicht nur um das @, auch wenn ein ! in $string drin ist, gibt Perl Fehlermeldungen aus.
Wie muss ich meinen Code modifizieren, damit Perl keinen Fehler zurueckgibt?
Hat mein Problem etwas mit dem Matching von Mulitbyte-Zeichen zu tun? (wohl eher nicht, oder?)
mfg
Felix Schwarz
Hi,
$string = "Forumsbesucher";
$compare = "=~ /forum/i";
eval "if ($string $compare) { print 'Erfolg!\n'; }";
dies wird expandiert zu:
if (Forumsbesucher =~ /forum/i) { print 'Erfolg!\n'; }
Mal abgesehen davon, daß das "\n" in Singlequotes nichts bringt, würde ich diese Syntax mal spontan als falsch bezeichnen - reguläre Ausdrücke beziehen sich auf Variablen, nicht auf Klartext.
Was mußt Du also maskieren? Aha :-)
Cheatah
Hallo Cheatah.
Danke für deine Hilfe. Heute beim Frühstück kams mir.
Richtig muss es natürlich heißen:
eval "if ('$string' $compare) { ... }";
dann klappts auch!
Felix
PS: \n in Siglequotes war nur ein Versehen, steht in meinem eigentl. Code auch anders...