Schrift
[thread]6193[/thread]

@INC Module im Unterverzeichnis von ./

Leser: 1


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Knuddlbaer
 2004-04-14 16:06
#81582 #81582
User since
2004-04-13
32 Artikel
BenutzerIn
[default_avatar]
Hallöchen!

Ich habe einige Module geschrieben und Hilfsskripte gebaut.
Damit das Chaos nicht so groß ist habe ich diese in ein Unterverzeichnis gepackt und in ../ einen Link auf die Hilfsmodule gelegt. Nun findet Perl aber die Module nicht mehr weil der Pfad natürlich nicht im @INC steht.

Kann ich das Ziel dennoch erreichen ohne Global @INC zu ändern ?

In C wäre das
#include "prog/modul.h"\n\n

<!--EDIT|Knuddlbaer|1081944433-->
renee
 2004-04-14 16:29
#81583 #81583
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
use lib qw(/pfad/zum/verzeichnis/in/dem/die/Module/sind);
use modul;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Knuddlbaer
 2004-04-14 16:58
#81584 #81584
User since
2004-04-13
32 Artikel
BenutzerIn
[default_avatar]
Vielen Dank! :)
[E|B]
 2004-04-14 20:31
#81585 #81585
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Wie wärs ganz trivial mit:

Code: (dl )
push(@INC, "../");
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
ptk
 2004-04-14 20:42
#81586 #81586
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Das geht nicht, weil
* Man kann sich nicht sicher sein, wo sich das aktuelle Verzeichnis befindet --- es muss nicht das Verzeichnis des Skripts sein. Das FindBin-Modul bietet sich hier an.
* Ohne BEGIN { } wird diese Anweisung nicht zur Compiletime ausgefuehrt und somit werden alle use-Anweisungen ohne den erweiterten Suchpfad aufgerufen
Knuddlbaer
 2004-04-14 21:47
#81587 #81587
User since
2004-04-13
32 Artikel
BenutzerIn
[default_avatar]
Hmm... thx für die Stichwörter.

Werd mal nach googeln.

Thx
Strat
 2004-04-15 02:15
#81588 #81588
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ich verwende da recht gerne
Code: (dl )
1
2
3
4
5
6
#! /usr/bin/perl
use strict;
use warnings;

use FindBin ();
use lib "$FindBin::Bin/lib/";

wenn z.B. die Module in ./lib/ liegen...

@E|B: ist dir der Unterschied zwischen push(@INC, "../"); und use lib "../" eigentlich klar? push(@INC, ...) besser nicht verwenden...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
[E|B]
 2004-04-15 11:32
#81589 #81589
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Klar ist der Unterschied klar. :)
Sollte nur eine Ergänzung sein.

@ptk

Wenn ich mir 100% sicher bin, dass ich im gewünschten Verzeichnis bin und auch erst später im Code ein Modul einbinde, kann ich auch meine Methode verwenden, und sollte sie noch so schrecklich sein. ;)
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
ptk
 2004-04-15 14:46
#81590 #81590
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[E|B
,15.April.2004, 09:32]Wenn ich mir 100% sicher bin, dass ich im gewünschten Verzeichnis bin und auch erst später im Code ein Modul einbinde, kann ich auch meine Methode verwenden, und sollte sie noch so schrecklich sein. ;)

Mich hat diese Annahme mal gebissen (nach einem Umzug auf einen anderen Server oder einer anderen Serverkonfiguration war cwd nicht mehr das Skriptverzeichnis).
Strat
 2004-04-15 22:43
#81591 #81591
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@E|B: anscheinend ist dir der Unterschied nicht so klar. versuche mal, mit push(@INC, ...) ein eigenes Modul namens Config oder so in einem bestimmten Verzeichnis zu laden... dies wirst du mit use so nicht schaffen. oder wenn du ein package namens XYZ verwendest, und dann auf dem Server ein Modul von CPAN namens XYZ installiert wird, dann wird durch das push(@INC, ...) beim naechsten Programmlauf ploetzlich ein voellig anderes Modul geladen als geplant, und dein code stirbt wahrscheinlich eines schrecklichen Todes...

Entweder da unshift(@INC, ...) verwenden, was das Verzeichnis an den Anfang des Modulsuchpfades stellt, oder use lib qw(...) verwenden, was im Grunde das gleiche wie unshift(@INC, ...) macht (nur halt noch mit ein paar Tests)\n\n

<!--EDIT|Strat|1082054706-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2004-04-14 16:06.