• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> 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.