• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Wir haben den Frühjahrsputz beendet, Ihr auch? Welches Foto zu dem Thema hat Euch dann am Besten gefallen? Hier geht es lang zur Abstimmung --> 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.
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Du kannst alle möglichen Umgebungsvariablen doch einfach innerhalb deines Skripts manipulieren (gleich zu Beginn), die Systempfade brauchst du doch dazu nicht anzufassen?
 

martinv2

Doppelter Prinzenapfel
Registriert
14.04.12
Beiträge
437
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'.
 

TheGhost

Idared
Registriert
05.10.08
Beiträge
25
Danke, absolute Pfade halfen auch, aber mit FindBin ist es eleganter.