Regex als argument uebergeben

Hallo,
ich hatte schon mehrfach das Beduerfnis, regulaere Ausdruecke als Kommandozeilen-parameter/argument zu uebergeben. Beispiel:

%\>conv-text2excel.pl --inputdir ..\texttabellen --outputdir ..\exceltabellen --recordsep "\n" --delimiter "\t"

Ein aehnliches Problem hatte ich auch, wenn ich in User-Interaktion suchen/ersetzen-Funktionen abfragen wollte:

print "\n Write the search- and replace-patterns! ";
print "\n \$search = "; 
chomp($\_ = ); # z. B. = \b(\w+)\.txt
$search = $\_;
print "\n \$replace = ";
chomp($\_ = ); # z. B. = $1
$replace = $\_;
foreach my $o (@original\_arr) {
 my ($c) = $o =~ s/$search/$replace/i;
 #sollte wie =~ s/\b(\w+)\.txt/$1/i; wirken, geht aber nicht!
 push @cleaned\_arr, \$c;
 }

Ich hatte viel mit qr (quote regular) und quotemeta rumexperimentiert, bin
aber noch nicht weiter gekommen.
Ich wollte schon zu so einer uneleganten Loesung schreiten, dass ich die
Strings unabgeaendert in ein neues Script ueberfuehre und ausfuehren lasse:

open (F, "\>$temp\_script");
...
print F "\n", ' my ($c) = $o =~ ', "s/$search/$replace/i; ";
...
close F;
system("$temp\_script");
unlink("$temp\_script");

Aber das ist es ja vielleicht doch nicht. Kann mir jemand helfen??
Danke. Dirk.

Hallo Dirk,

was tut denn genau nicht?

Habe gerade auf die Schnelle dieses getestet, und das funzt…

#! /usr/local/bin/perl
# Aufruf: Suchstring / RE-STring

my ($string, $re) = @ARGV;
if ($string =~ m/$re/) {
 print "MATCH!\n";
} else {
 print "doesnt match...\n";
}

Vielleicht musst du die Kommandozeilenargumente anders quoten, damit die Shell dir nicht die (Interpretations-)Arbeit abnimmt? Nur so ne Idee.

Gruß
bernhard

Hi,
bei solchen Problemen hilft normalerweise eval() weiter.
Du kannst dann in dein eval den code um das argument rum aufbauen. Nur Vorsicht: nicht in einem CGI-Skript einsetzen, da ist eval eine Sicherheitsluecke

Auf meinem Debian-System funktioniert das Kommando rename so.
Gruesse,
Moritz