Hi,
require wird erst zur Laufzeit ausgeführt, d.h. es wird nicht die import Funktion augerufen und es findet keine Prüfung statt ob du die Variabeln deklariert hast.
Danke, dann ist das schonmal klar.
Warum das Skript im anderen Fall abgebrochen wird ist dir aber klar?
Ja, weil die Variable $abc nie deklariert, definiert oder initialisiert (eines der 3 wird den Fehle erzeugen;) wurde.
Jetzt ist mir aber nochmal was aufgefallen:
Wenn ich ein selbstgeschriebenes Modul einbinde und dort dann wieder auf eine unbekannte Variable zugreifen will wird nur abgebrochen, wenn in dem Modul "use strict" steht, nicht aber, wenn "use strict" nur im Script, das das Modul einbindet, steht.
Beispiel:
testScript.pl:
#!/usr/bin/perl -w
use strict;
use tmp; # gleiches Verhalten bei use und require
tmp.pm:
#use strict;
package tmp;
sub testSub
{
print "test: $abc";
}
1;
Es wird nur abgebrochen, wenn ich in tmp.pm das use strict einkommentiere. Ich haette eigentlich erwartet, dass das use strict aus testScript.pl ausreicht.
Ich war der Meinung, dass use sowas wie in C eine Praeprozessoranweisung ist, die den Code dann direkt einsetzt, bevor der Compiler (heisst das in Perl auch so?) den Code weiterverarbeitet.
Da habe ich mich wohl geirrt?
mfG,
steckl