• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

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.