• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

perl - require - terminal vs batch

TheGhost

Idared
Registriert
05.10.08
Beiträge
25
Hallo,

ich habe mir eine eigene Bibliothek beschrieben "./lib/support.pl".
Diese binde ich via
require './lib/support.pl' or die "Cannot find the support lib\n";

in das Hauptprogramm "readlog.pl" ein. Starte ich ts_stats.pl vom Terminal klappt das wunderbar.

Lasse ich jedoch readlog.pl im batch laufe, bekomme ich den Fehler dass meine Bib nicht im Standardpfad zu finden ist.

Gibt es eine Methode die "batchsicher" ist um Programme einzubinden - ohne gleich die Standardpfade zu erweitern?

Danke!

Can't locate ./lib/support.pl in @INC (@INC contains: /Library/Perl/5.12/darwin-thread-multi-2level /Library/Perl/5.12 /Network/Library/Perl/5.12/darwin-thread-multi-2level /Network/Library/Perl/5.12 /Library/Perl/Updates/5.12.4/darwin-thread-multi-2level /Library/Perl/Updates/5.12.4 /System/Library/Perl/5.12/darwin-thread-multi-2level /System/Library/Perl/5.12 /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level /System/Library/Perl/Extras/5.12 .) at /Users/dominik/Dev/scripts/ts_stats/readlog.pl line 30.
 
Du kannst alle möglichen Umgebungsvariablen doch einfach innerhalb deines Skripts manipulieren (gleich zu Beginn), die Systempfade brauchst du doch dazu nicht anzufassen?
 
Wie die Fehlermeldung sagt, kann readlog.pl die Datei ./lib/support.pl nicht in der Liste der Standardpfade finden (die in der Variable @INC abgelegt ist). Das liegt daran, dass "." im Batch-Fall nicht auf das Verzeichnis zeigt, in dem readlog.pl liegt. Du kannst dieses Verzeichnis aber zu @INC hinzufügen:
Code:
use FindBin ();
use lib $FindBin::Bin;
direkt vor der Zeile mit 'require'.
 
Danke, absolute Pfade halfen auch, aber mit FindBin ist es eleganter.