Schrift
[thread]6644[/thread]

Wieso Endlosschleife?



<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
esskar
 2005-01-20 13:15
#50923 #50923
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use strict;
use warnings;

my $value = "Start your year with a Smart move .. Register for FREE";

eval "require Encode; $value = Encode::decode('MIME-Header', $value)";


Verursacht bei mir (WinXP, und Perl 5.8.4) eine Endlosschleife und müllt den Speicher zu; ohne eval passiert das nicht;

kennt jemand den grund?
format_c
 2005-01-20 13:28
#50924 #50924
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Das problem ist, dass die Variable vor dem eval interpoliert wird:
so gehts:
Code: (dl )
eval q{require Encode; $value = Encode::decode('MIME-Header', $value);};


Gruß Alex
esskar
 2005-01-20 13:29
#50925 #50925
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
das kann nicht der grund sein
Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use strict;
use warnings;

my $value = "Hallo du";

eval "require Encode; $value = Encode::decode('MIME-Header', $value)";


funzt ja auch!
pq
 2005-01-20 13:32
#50926 #50926
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
kein wunder, guck mal, was du evaluierst.
auch hier wieder ein schönes beispiel, wie ein print-statement an der richtigen stelle wunder wirkt.
Code: (dl )
1
2
3
4
5
6
perl -wle'
my $value = "Start your year with a Smart move .. Register for FREE";
my $eval = "require Encode; $value = Encode::decode('MIME-Header', $value)";
print "Eval:\n$eval"'
Eval:
require Encode; Start your year with a Smart move .. Register for FREE = Encode::decode(MIME-Header, Start your year with a Smart move .. Register for FREE)

ich nehme an, dass du stattdesssen
my $eval = "require Encode; \$value = Encode::decode('MIME-Header', \$value)";
tun willst. darf ich fragen, wieso es kein block-eval sein darf? string-eval
brauchst du doch hier echt nicht...
also
eval {
 require Encode;
 $value = Encode::decode('MIME-Header', $value);
}


edit: ein $ vergessen\n\n

<!--EDIT|pq|1106220970-->
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
pq
 2005-01-20 13:34
#50927 #50927
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=esskar,20.01.2005, 12:29]das kann nicht der grund sein
...

funzt ja auch![/quote]
na klar, wenn du dir den fehler von eval nicht ausgeben läßt.
Can't locate object method "Hallo" via package "du" (perhaps you forgot to load "du"?) at (eval 1) line 1.\n\n

<!--EDIT|pq|1106220921-->
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
esskar
 2005-01-20 13:50
#50928 #50928
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ist ja gut; ich geb mich geschlagen!
danke!
esskar
 2005-01-21 01:38
#50929 #50929
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=pq,20.01.2005, 12:32]brauchst du doch hier echt nicht...[/quote]
denk schon; will eben keinen fehler bekommen, wenn Encode nicht existiert!
ptk
 2005-01-21 11:28
#50930 #50930
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=esskar,21.01.2005, 00:38][quote=pq,20.01.2005, 12:32]brauchst du doch hier echt nicht...[/quote]
denk schon; will eben keinen fehler bekommen, wenn Encode nicht existiert![/quote]
Wenn du "require" statt "use" verwendest, reicht ein Block-eval voellig aus.
esskar
 2005-01-21 13:52
#50931 #50931
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich hab require genohmen; bekomme aber trotzdem einen fehler wenn Encode nicht existiert!
pq
 2005-01-21 16:26
#50932 #50932
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Code: (dl )
1
2
3
4
5
tina@station10> perl -wle'
eval {
require Bla;
}'      
tina@station10>

kein fehler. (natürlich steht in $@ dann ein fehler, aber das programm läuft weiter ohne einen mucks)
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
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2005-01-20 13:15.