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

Funktionsaufruf per String eval (Seite 2)

Leser: 3


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
Escape
 2008-08-04 12:48
#113058 #113058
User since
2008-07-24
312 Artikel
BenutzerIn
[default_avatar]
Gast+2008-08-03 08:34:44--
In allen drei Fällen steht hinter eval der Name eines existierenden Unterprogramms.

Nicht in diesem Fall
@array = @{eval "$sub_name"};
und das ist es was mich so sehr irritiert.
Die Deutsche Rechtschreibung ist Freeware; Du darfst sie kostenlos nutzen – aber sie ist nicht Open Source, d.h. Du darfst sie nicht verändern und/oder in veränderter Form veröffentlichen.
pq
 2008-08-04 13:05
#113060 #113060
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
Escape+2008-08-04 10:48:34--
Gast+2008-08-03 08:34:44--
In allen drei Fällen steht hinter eval der Name eines existierenden Unterprogramms.

Nicht in diesem Fall
@array = @{eval "$sub_name"};

wieso nicht?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Escape
 2008-08-04 20:32
#113076 #113076
User since
2008-07-24
312 Artikel
BenutzerIn
[default_avatar]
pq+2008-08-04 11:05:28--
wieso nicht?

Weil (Beispiel):
$sub_name = foo;

Das hier:
$var = foo;
löst einen Fehler aus.

Das hier:
$var = eval "$sub_name";
löst keinen Fehler aus.

Bin ratlos.
Die Deutsche Rechtschreibung ist Freeware; Du darfst sie kostenlos nutzen – aber sie ist nicht Open Source, d.h. Du darfst sie nicht verändern und/oder in veränderter Form veröffentlichen.
Struppi
 2008-08-04 20:35
#113077 #113077
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Was ist foo?
pq
 2008-08-04 20:56
#113080 #113080
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
Escape+2008-08-04 18:32:36--
Das hier:
$var = foo;
löst einen Fehler aus.

Das hier:
$var = eval "$sub_name";
löst keinen Fehler aus.

Bin ratlos.

vergleiche:
Code: (dl )
1
2
3
4
5
6
7
8
$ perl -wle'
my $var = foo;
sub foo { 23 }'
Unquoted string "foo" may clash with future reserved word at -e line 2.
$ perl -wle'
sub foo { 23 }
my $var = foo'
$

der unterschied liegt darin, dass die sub foo erst deklariert sein muss, damit man foo
ohne klammern aufrufen kann. und im zum zeitpunkt des eval ist die sub schon vorhanden.


edit: vertipper im 2. beispiel, muss foo statt $foo heissen, ergebnis ist aber dasselbe =)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Escape
 2008-08-05 00:59
#113088 #113088
User since
2008-07-24
312 Artikel
BenutzerIn
[default_avatar]
Danke, damit hab ich's jetzt kapiert.
Die Deutsche Rechtschreibung ist Freeware; Du darfst sie kostenlos nutzen – aber sie ist nicht Open Source, d.h. Du darfst sie nicht verändern und/oder in veränderter Form veröffentlichen.
Struppi
 2008-08-05 01:20
#113091 #113091
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Nach wie vor Frage ich mich warum du hier auf eval setzt?
Escape
 2008-08-05 18:47
#113118 #113118
User since
2008-07-24
312 Artikel
BenutzerIn
[default_avatar]
Struppi+2008-08-04 23:20:30--
Nach wie vor Frage ich mich warum du hier auf eval setzt?

Weil mir, als ich den Code schrieb, Deine Lösung (no strict refs) nicht eingefallen ist :-)

Die Deutsche Rechtschreibung ist Freeware; Du darfst sie kostenlos nutzen – aber sie ist nicht Open Source, d.h. Du darfst sie nicht verändern und/oder in veränderter Form veröffentlichen.
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2008-08-02 21:12.