Thread Bad name after... (52 answers)
Opened by bianca at 2015-02-19 12:08

Linuxer
 2015-02-22 00:42
#179821 #179821
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Ich schrieb nicht ohne Grund:
Quote
Hier erweitern wir den String-eval() und reiten fröhlich in den Abgrund ;-)


Genau so eine Entwicklung habe ich befürchtet.
Hier greift die String-Interpolation; wir sind schließlich beim String-eval().

Du musst Dir klar werden, welche Variable wo gültig sein soll und wann sie ausgewertet werden soll.
Skalare kannst Du beispielsweise so übergeben:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
for my $ref ( @dispatch ) {

        my $argument = "Bla";                    # etwas zum Weiterreichen an die Sub

        eval <<"EVAL_CODE";
package $ref->{unit};
require "$ref->{file}";
$ref->{subroutine}(\$argument);                  # $argument ist maskiert, weil es nicht im String interpoliert, sondern erst beim eval() ausgewertet werden soll
EVAL_CODE
        warn "ACHTUNG: $@\n"    if $@;
}


Ähnlich musst Du es handhaben, wenn Deine Subroutinen Werte zurückliefern und Du diese an Variablen zuweisen willst. Die aufnehmenden Variablen müssen ebenso maskiert und so vor der String-Interpolation geschützt werden.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Bad name after...