Matti Maekitalo: Wie setzt man die @INC

Beitrag lesen

use Mosche;

Du kannst mit dem Befehl "use lib" in Deinem Script beliebige Verzeichnisse für aufzurufende Module definieren. Lies http://www.perldoc.com/perl5.6.1/lib/lib.html

Ja .... das weiß ich ja. Aber das will ich ja gerade nicht.

Hier mal die technische Seite:

Module, die per 'use' eingebunden werden, werden gleich zur "Kompilierungsphase" ausgeführt, also nicht an der Stelle, an der das ganze eingebunden wird. Folgende Ausschnitte sind also gleich:

#####1#####
use Module;
print $Module::blah;

#####2#####
print $Module::blah;
use Module;

Das heisst, du kannst nicht per
push(@INC, ...);
@INC setzen, weil dies erst nach dem Kompilieren geschehen würde (zu einem Zeitpunkt, wo die Fehlermeldung schon "draussen" ist). Du hast nun mehrere Wege:

  1. Benutze statt "use" "require" inklusive aller Risiken und Nebenwirkungen.
  2. Setze einen BEGIN-Block und führe dort den Push aus (das muss vor dem "use Module" sein, denn dass wird dann wiederum hintereinander ausgeführt.
  3. Benutze "use lib;" - das ist im Grunde das gleiche wie 2), nur sicherer/besser.

use Tschoe qw(Matti);