Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]13105[/thread]

Auflösen von $ENV{} über 'eval'

Leser: 1


<< >> 3 Einträge, 1 Seite
peri
 2009-02-06 17:01
#118676 #118676
User since
2009-02-06
12 Artikel
BenutzerIn

user image
Hallo Leute,
ich finde keine Lösung für folgendes Problem:

ich möchte in einer Steuerdatei beliebige Windows-EnvironmentVariablen verwenden können, die in einem PerlScript aufgelöst werden.
Konkretes Beispiel ist 'ne Kopierliste "Von";"Nach" die mittels Script abgearbeitet werden soll.
Beispiel:
Code: (dl )
"$ENV{TEMP}/myFile.ext";"c:/myFolder/myFile.ext"


Ich hab' das unter anderem versucht mit:
Code: (dl )
1
2
3
4
5
6
7
8
....
while (<$tmpFileHandle>)
{
my $line = $_;
my $var;
eval { $var = $line; };
print ("LINE: $var \n");
}


... heraus kommt aber immer nur:
LINE: $ENV{USERNAME}/ist/mein/name

Kann mir jemand helfen? Thx in advance ...
moritz
 2009-02-06 20:10
#118678 #118678
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Es ist im Allgemeinen eine ziemlich schlechte Idee, eval() für sowas zu nehmen, weil es recht leicht sehr unsicher werden kann.

Stattdessen würde ich s/// benutzen:

Code (perl): (dl )
$line =~ s/\$ENV{(\w+)}/$ENV{$1}/g


Damit hast du genaue Kontrolle darüber, was du an Ersetzungen erlauben willst.
Gast Gast
 2009-02-06 23:26
#118680 #118680
dabei wird das Stringeval gebraucht also:
Code (perl): (dl )
$var=eval($line);

Aber besser ist wirklich der reguläre Ausdruck mit eval würde in $line auch so was interpretiert:
Code (perl): (dl )
$ine="system('rm -rf /')"
und das wäre doch sicherlich nicht wünschenswert...
<< >> 3 Einträge, 1 Seite



View all threads created 2009-02-06 17:01.