Wie setzt man die @INC
MichaelB
- perl
Hallo allerseits,
ich bekomme hier an meinem Rechner (Redhat Linux 7.3) ständig die Fehlermeldung bei der Ausführung eines Perl-Skriptes, dass die MD5.pm nicht gefunden werden kann ("Can't locate MD5.pm in @INC "). Die Datei ist zwar vorhanden aber der Pfad fehlt in der @INC.
Gibt es eine Möglichkeit diese global irgendwie zu beeinflussen ohne den Pfad im Skript oder via Kommandozeile übergeben zu müssen.
Wenn man ein Perlskript aufruft, sind ja schon Pfade in dieser "Variable" enthalten. Und irgendwo müssen die ja herkommen. Woe genau sind sie definiert?
Danke im voraus
Gruss
MichaelB
Hallo allerseits,
ich bekomme hier an meinem Rechner (Redhat Linux 7.3) ständig die Fehlermeldung bei der Ausführung eines Perl-Skriptes, dass die MD5.pm nicht gefunden werden kann ("Can't locate MD5.pm in @INC "). Die Datei ist zwar vorhanden aber der Pfad fehlt in der @INC.
Gibt es eine Möglichkeit diese global irgendwie zu beeinflussen ohne den Pfad im Skript oder via Kommandozeile übergeben zu müssen.
Wenn man ein Perlskript aufruft, sind ja schon Pfade in dieser "Variable" enthalten. Und irgendwo müssen die ja herkommen. Woe genau sind sie definiert?
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
Viel Spass!
Richard
Danke im voraus
Gruss
MichaelB
Hallo,
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.
Trotzdem Danke für die Antwort.
Gruss
MichaelB
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:
use Tschoe qw(Matti);
Hallo,
ich bekomme hier an meinem Rechner (Redhat Linux 7.3) ständig die Fehlermeldung bei der Ausführung eines Perl-Skriptes, dass die MD5.pm nicht gefunden werden kann ("Can't locate MD5.pm in @INC "). Die Datei ist zwar vorhanden aber der Pfad fehlt in der @INC.
DAnn dürfte das Modul nicht so installiert worden sein, wie es an anund für sich bei Perl vorgesehen wurde. Vielleicht würde auch die Lektüre von perlmodinstall helfen.
Gibt es eine Möglichkeit diese global irgendwie zu beeinflussen ohne den Pfad im Skript oder via Kommandozeile übergeben zu müssen.
Naja eine Variante wüßte ich schon, die ist aber nicht gerade die feine Art. Also : 'kids, don't try this at home'
#!/path/to/perl
BEGIN
{
push @INC,split(':',$ENV{'MY_PERL_INCLUDE'});
}
use whatever::modules;
Die Zusätzlichen Perl-Pfade kannst Du dann ja in der Environmentvariable 'MY_PERL_INCLUDE' ablegen.
Wenn man ein Perlskript aufruft, sind ja schon Pfade in dieser "Variable" enthalten. Und irgendwo müssen die ja herkommen. Woe genau sind sie definiert?
AFAIK werden die Standardpfade bereits beim Kompilieren festgelegt. Allerdings, wenn Du Perl neu kompilieren könntest, dann könntest Du auch die Module gleich in die richtigen Pfade ablegen, was Dir diesen Streß hier ersparen würde.
Grüße
Klaus