Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5427[/thread]

eigenes Modul einbinden: "Can't locate object method modul.pm"



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Gast Gast
 2004-07-14 12:19
#48859 #48859
Hallo,
ich habe ein Problem mein Modul in ein Perlskript einzubinden. Liegen modul.pm und test.pl in einem Verzeichnis ist es kein Problem:

Code: (dl )
1
2
3
4
#!/usr/bin/perl -w
use modul;

$r = modul->new;


will ich aber test.pl von einem anderen Verzeichnis ausführen mit korrekter Pfadangabe kommt:
"Can't locate modul.pm in @INC..."

daraufhin füge ich die Zeile ein:
"use lib /home/squirrel/modules"

aber wie muss ich dann mein modul (liegt nun im Verz modules) einbinden, dass es von überall aus aufrufbar ist?

Kann mir bitte jemand helfen?!

Gruß squirrel

Bearbeitet von Crian: CODE-Tags hinzugefügt.\n\n

<!--EDIT|Crian|1089794201-->
ptk
 2004-07-14 12:28
#48860 #48860
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Du koenntest beispielsweise das Modul in den Standard-Perl-Verzeichnis site_perl installieren. Am sichersten geht das, indem du ein kleines Makefile.PL schreibst und eine "normale" Perl-Modul-Installation durchfuehrst. Oder du definierst die Environment-Variable PERL5LIB, allerdings muss diese dann auch fuer alle Benutzer, die das Modul nutzen wollen, definiert sein.
Crian
 2004-07-14 12:34
#48861 #48861
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Willkommen squirrel, für Dein Problem eignet sich das Modul FindBin, solange Du Dein Modul noch nicht in den offiziellen Modulpfad stellen willst, etwa weil Du noch daran entwickelst. Hier ein Beispiel, wie Dein Programmkopf dann aussehen könnte:

Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/perl/bin
use strict;
use warnings;

use FindBin;
use lib "$FindBin::Bin";

use modul;


Dann wird das Verzeichnis, in dem Dein Skript liegt, auch nach Modulen durchsucht.\n\n

<!--EDIT|Crian|1089794308-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
renee
 2004-07-14 12:40
#48862 #48862
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du musst in allen Skripten, in denen Du das Modul verwenden willst, die Zeile
Code: (dl )
use lib qw(/home/squirrel/modules);
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/
squirrel
 2004-07-14 13:08
#48863 #48863
User since
2004-07-14
2 Artikel
BenutzerIn
[Homepage] [default_avatar]
Vielen Dank für die schnelle Hilfe,
jetzt klappt's so wie ich will:

use lib "/home/squirrel/";
use modules::modul;

Nochmals danke
pq
 2004-07-14 13:12
#48864 #48864
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
wenn das modul den packagenamen 'modul' hat, solltest du aber gerade nicht 'modules'
mit ins use nehmen.
 use lib '/home/squirrel/modules';
 use module;

sollte völlig in ordnung sein.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Crian
 2004-07-14 13:51
#48865 #48865
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Die Variante mit FindBin ist dem Verwenden von absoluten Pfaden imho vorzuziehen. Denn dann kann man den Ornder mit dem Projekt auch von einer USB-Stick/Diskette oder einem anderen Computer an einer anderen Stelle des Baumes oder einem anderen Verzeichnis auf dem selben Rechner verwenden.

So muss jeder User erstmal die Anweisung anpassen, das ist nicht schön.\n\n

<!--EDIT|Crian|1089798780-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
pq
 2004-07-14 14:08
#48866 #48866
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
aber ich dachte, hier wäre gerade das problem, dass
das modul eben nicht im script-verzeichnis
liegt und somit FindBin gar nichts nützt...
oder habe ich das falsch verstanden?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
squirrel
 2004-07-14 17:52
#48867 #48867
User since
2004-07-14
2 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,
bins nochmal :-)

Vielen Dank für eure tolle Unterstützung! Ursprünglich wollte ich mein Skript, das das Modul aufruft vom Modul getrennt haben. Das hat auch ganz gut geklappt mit dem "use lib"

allerdings bin ich jetzt auch froh drüber zu wissen, dass ich das FindBin von Crian benutzen kann, da ich das Modul für verschiedene User (teils auf anderen Rechnern) zur Verfügung stellen will und da dann Probleme mit "use lib" auftauchen...

So muss ich mich eben dran gewöhnen Modul und Skript in einem Verzeichnis zu legen ;-)

Insofern haben mir alle Vorschläge weitergeholfen, danke!

Gruß squirrel
renee
 2004-07-14 18:05
#48868 #48868
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich mache das meistens so, dass ich folgende Struktur habe:
Code: (dl )
1
2
3
4
+ Verzeichnisname
| + bin
| + module
...


In bin befindet sich dann das Skript und in module meine Module...

Dann mache ich im Skript immer folgendes:
Code: (dl )
1
2
use FindBin;
use lib "$FindBin::Bin/../module";
\n\n

<!--EDIT|renee|1089813940-->
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/
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2004-07-14 12:19.