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

require?

Tags: Ähnliche Threads

Leser: 7


<< >> 6 Einträge, 1 Seite
ppm1
 2003-11-11 20:21
#71266 #71266
User since
2003-09-14
142 Artikel
BenutzerIn
[default_avatar]
Ich wollte fragen ob:

Wenn ich ein Modul in eine if /else Anweisung mit require einbaue. Es immer geladen wird, oder nur wenn auch dieser Zweig angesteuert wird:

BSP.:

Code: (dl )
1
2
If (not defined $hallo) {require Nein;}
Else { require JA;}


Werden dann beide Module oder nur das jeweilig benötigte Modul geladen bzw. interpretiert?
[E|B]
 2003-11-11 20:27
#71267 #71267
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ein Beispiel (eigene Erfahrung):

Code: (dl )
1
2
3
4
5
if($gd == "0"){
use GD;
}else{
use Image::Magick;
}


Dieses Beispiel lieferte unter Windows - dort hatte ich das Script getestet - einen Fehler, da GD nicht installiert war, obwohl $gd den Wert "1" enthielt. Daran sieht man also, dass der Perl Interpreter nicht zur Laufzeit interpretiert. Demnach funktioniert deine Methode nicht. Wenn du ein Modul einbinden willst - speziell jetzt auf die Art wie du es machen willst - musst du eine Abfrage in den BEGIN Block am Anfang des Scripts setzen. Dort kannst du via "$@" prüfen, ob ein Fehler beim Einbinden des Moduls aufgetreten ist und frühzeitig reagieren.
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
ppm1
 2003-11-11 21:23
#71268 #71268
User since
2003-09-14
142 Artikel
BenutzerIn
[default_avatar]
Mit use ist das klar.

Aber require ist doch anders oder?
kabel
 2003-11-11 22:38
#71269 #71269
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
@EB: deine argumentation ist mindestens konfus. aber schön der reihe nach:

Quote
Dieses Beispiel lieferte unter Windows - dort hatte ich das Script getestet - einen Fehler, da GD nicht installiert war, obwohl $gd den Wert "1" enthielt. Daran sieht man also, dass der Perl Interpreter nicht zur Laufzeit interpretiert.

perl interpretiert sowohl zur laufzeit als auch zur compilezeit. es kommt nur darauf an, was er da interpretiert - und use gehört in die compilezeit-ecke:

Quote
It (anm: das use statement) is exactly equivalent to
BEGIN { require Module; import Module LIST; }
except that Module must be a bareword.


BEGIN blöcke sind leicht kompliziert, einer kann aber sagen, dass sie zur compilezeit ausgeführt werden (perlmod).

Code: (dl )
1
2
3
4
5
6
7
kabel@linux:~> perl
if (0) { use CGI; }
print STDOUT CGI::header ();

Content-Type: text/html; charset=ISO-8859-1

kabel@linux:~>


dagegen require:
Code: (dl )
1
2
3
4
5
6
kabel@linux:~> perl
if (0) { require CGI; }

print STDOUT CGI::header ();
Undefined subroutine &CGI::header called at - line 3.
kabel@linux:~>


Quote
Demnach funktioniert deine Methode nicht.

wonach?

Quote
Wenn du ein Modul einbinden willst - speziell jetzt auf die Art wie du es machen willst - musst du eine Abfrage in den BEGIN Block am Anfang des Scripts setzen.

??? wie will er es denn machen?

Quote
Dort kannst du via "$@" prüfen, ob ein Fehler beim Einbinden des Moduls aufgetreten ist und frühzeitig reagieren.

in $@ steht der sog. eval error.

hier ebenfalls eine diskussion use/require.
-- stefan
esskar
 2003-11-12 00:15
#71270 #71270
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
@Eb:

Hättest du require benutzt, hätte es funktioniert...
use wird immer ausgeführt (bzw. weiterverfolgt) ... direkt beim parsen...
[E|B]
 2003-11-12 13:17
#71271 #71271
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
@kabel

Ja, in "$@" steht der "eval"-Error. Du kannst aber versuchen ein Modul zu evaluieren (in BEGIN) und ggf. bei auftretenden Fehlern in "$@" dentsprechend weiterverfahren.
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
<< >> 6 Einträge, 1 Seite



View all threads created 2003-11-11 20:21.