use lib auf Webserver
am 11.11.2006 20:34:08 von helmut_nospam
Hallo NG,
habe vor einiger Zeit hier das Problem geschildert, dass ich auf meinem=20
Webserver ein eigenes Perl-Verzeichnis (unter cgi-bin) mit=20
use lib '/ my_perl_dir' zuweisen wollte, was aber partout nicht funktionier=
en=20
wollte.
Habe daraufhin hier einige Tipps bekommen, die mir aber leider nicht=20
weitergeholfen haben. Jetzt habe ich noch einmal verzweifelt herumprobiert =
und=20
die Lösung gefunden: es wird gar nicht 'use lib' verwendet, sondern beim =
Laden=20
des Moduls gebraucht man folgende Syntax:
use my_perl_dir::Klasse::Modul;
z.B.
use my_perl_dir::HTML::TableExtract;
Vielleicht hat ja jemand von Euch das gleiche Problem....
Gruss, Helmut
Re: use lib auf Webserver
am 11.11.2006 21:22:36 von Slaven Rezic
helmut_nospam@web.de (Helmut Blass) writes:
> Hallo NG,
> habe vor einiger Zeit hier das Problem geschildert, dass ich auf meinem
> Webserver ein eigenes Perl-Verzeichnis (unter cgi-bin) mit
> use lib '/ my_perl_dir' zuweisen wollte, was aber partout nicht funktionieren
> wollte.
> Habe daraufhin hier einige Tipps bekommen, die mir aber leider nicht
> weitergeholfen haben. Jetzt habe ich noch einmal verzweifelt herumprobiert und
> die Lösung gefunden: es wird gar nicht 'use lib' verwendet, sondern beim Laden
> des Moduls gebraucht man folgende Syntax:
>
> use my_perl_dir::Klasse::Modul;
> z.B.
> use my_perl_dir::HTML::TableExtract;
>
> Vielleicht hat ja jemand von Euch das gleiche Problem....
Der Verzeichnisname im "use"? Das ist zwar technisch möglich, aber
alles andere als schön. Bist du sicher, dass du den richtigen Pfad in
"use lib" eingetragen hast?
Falls du den Library-Pfad relativ zum CGI-Skript angeben willst,
kannst du FindBin verwenden:
use FindBin;
use lib "$FindBin::RealBin/........./my_perl_dir"
Gruß,
Slaven
--
Slaven Rezic - slaven rezic de
need xpm or ppm output from GD?
http://search.cpan.org/search?mode=module&query=GD::Convert
Re: use lib auf Webserver
am 11.11.2006 21:43:23 von Frank Seitz
Slaven Rezic wrote:
> helmut_nospam@web.de (Helmut Blass) writes:
>>
>>use my_perl_dir::Klasse::Modul;
>>z.B.
>>use my_perl_dir::HTML::TableExtract;
>
> Der Verzeichnisname im "use"? Das ist zwar technisch möglich, aber
> alles andere als schön. Bist du sicher, dass du den richtigen Pfad in
> "use lib" eingetragen hast?
Es ist klar, dass er nicht den richtigen Pfad eingetragen
hat, denn dann hätte es funktioniert. Er hätte einen der Pfade
in @INC um my_perl_dir erweitern und diesen Pfad
bei "use lib" angeben müssen.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: use lib auf Webserver
am 11.11.2006 22:52:43 von hjp-usenet2
On 2006-11-11 20:22, Slaven Rezic wrote:
> helmut_nospam@web.de (Helmut Blass) writes:
>> habe vor einiger Zeit hier das Problem geschildert, dass ich auf meinem
>> Webserver ein eigenes Perl-Verzeichnis (unter cgi-bin) mit
>> use lib '/ my_perl_dir' zuweisen wollte, was aber partout nicht funktionieren
>> wollte.
>> Habe daraufhin hier einige Tipps bekommen, die mir aber leider nicht
>> weitergeholfen haben. Jetzt habe ich noch einmal verzweifelt herumprobiert und
>> die Lösung gefunden:
Nein, hast Du nicht.
>> es wird gar nicht 'use lib' verwendet, sondern beim Laden des Moduls
>> gebraucht man folgende Syntax:
>>
>> use my_perl_dir::Klasse::Modul;
>> z.B.
>> use my_perl_dir::HTML::TableExtract;
>>
>> Vielleicht hat ja jemand von Euch das gleiche Problem....
>
> Der Verzeichnisname im "use"? Das ist zwar technisch möglich, aber
> alles andere als schön.
Es ist nicht nur nicht schön, es funktioniert auch nicht.
use my_perl_dir::Klasse::Modul
ist im Wesentlichen das gleiche wie
BEGIN {
require my_perl_dir::Klasse::Modul;
import my_perl_dir::Klasse::Modul;
}
Wenn aber in dem so geladenen File nicht das Package
my_perl_dir::Klasse::Modul, sondern das Package Klasse::Modul definiert
ist, dann wird dessen import-Methode nicht aufgerufen.
HTML::TableExtract hat vermutlich keine import-Methode, darum fällt der
Fehler nicht auf. Hier ist ein triviales Beispiel, wo man den
Unterschied sieht:
-------- lib/Bar.pm ----------------------------------------
#!/usr/bin/perl
package Bar;
use strict;
use warnings;
use Exporter;
use vars qw(@ISA @EXPORT);
@ISA = qw(Exporter);
@EXPORT = qw(b);
sub b {
print "called b in ", __PACKAGE__, "\n";
}
------------------------------------------------------------ ----
-------- a ----------------------------------------
#!/usr/bin/perl
use strict;
use warnings;
use Bar;
b();
------------------------------------------------------------ ----
% ./a
Can't locate Bar.pm in @INC (@INC contains: ...
Wie zu erwarten war. Aber wenn wir PERL5LIB setzen, dann funktioniert
es:
% PERL5LIB=./lib ./a
called b in Bar
Ebenso, wenn wir 'use lib' verwenden:
-------- a0 ----------------------------------------
#!/usr/bin/perl
use strict;
use warnings;
use lib ('lib');
use Bar;
b();
------------------------------------------------------------ ----
% ./a0
called b in Bar
Mit Helmuts Methode hingegen ...
-------- a1 ----------------------------------------
#!/usr/bin/perl
use strict;
use warnings;
use lib::Bar;
b();
------------------------------------------------------------ ----
funktioniert es nicht:
% ./a1
Undefined subroutine &main::b called at ./a1 line 6.
hp
--
_ | Peter J. Holzer | > Wieso sollte man etwas erfinden was nicht
|_|_) | Sysadmin WSR | > ist?
| | | hjp@hjp.at | Was sonst wäre der Sinn des Erfindens?
__/ | http://www.hjp.at/ | -- P. Einstein u. V. Gringmuth in desd
Re: use lib auf Webserver
am 12.11.2006 11:08:42 von helmut_nospam
In article <87u015d983.fsf@biokovo.herceg.de>, slaven@rezic.de wrote:
>Der Verzeichnisname im "use"? Das ist zwar technisch möglich, aber
>alles andere als schön. Bist du sicher, dass du den richtigen Pfad in
>"use lib" eingetragen hast?
Ja, er liegt ja direkt unter cgi-bin.
>
>Falls du den Library-Pfad relativ zum CGI-Skript angeben willst,
>kannst du FindBin verwenden:
>
> use FindBin;
> use lib "$FindBin::RealBin/........./my_perl_dir"
...werde ich mal ausprobieren. Danke!
Re: use lib auf Webserver
am 12.11.2006 11:54:39 von helmut_nospam
In article <87u015d983.fsf@biokovo.herceg.de>, slaven@rezic.de wrote:
>Falls du den Library-Pfad relativ zum CGI-Skript angeben willst,
>kannst du FindBin verwenden:
>
> use FindBin;
> use lib "$FindBin::RealBin/........./my_perl_dir"
Hallo Slaven,
das hat tatsächlich geklappt.
Kurios ist allerdings, dass ich den von FindBin ermittelten Pfad=20
(beginnend mit 'home'..) auch schon vorher direkt in use lib angegeben habe=
=20
und da hat es nicht geklappt...
Gruss, Helmut
Re: use lib auf Webserver
am 12.11.2006 13:12:24 von Michael Perle
Helmut Blass wrote:
> die Lösung gefunden: es wird gar nicht 'use lib' verwendet, sondern beim Laden
> des Moduls gebraucht man folgende Syntax:
>
> use my_perl_dir::Klasse::Modul;
Wieso Klasse::Modul?
Du meinst
Unterverzeichnis::Modul bzw.
Unterverzeichnis::Klasse
> z.B.
> use my_perl_dir::HTML::TableExtract;
Die doppelten Doppelpunkte sind doch hier
nix anderes als ein Slash zum Unterverzeichnis.
Ich nehme an, Du hast davor
use lib '/var/www/cgi-bin/my_perl_dir'
aufgerufen. Dann ist das doch ganz normal.
Re: use lib auf Webserver
am 14.11.2006 01:58:16 von Joergen Lang
Helmut Blass schrieb:
> In article <87u015d983.fsf@biokovo.herceg.de>, slaven@rezic.de wrote:
>
>> Falls du den Library-Pfad relativ zum CGI-Skript angeben willst,
>> kannst du FindBin verwenden:
>>
>> use FindBin;
>> use lib "$FindBin::RealBin/........./my_perl_dir"
>
> Hallo Slaven,
> das hat tatsächlich geklappt.
> Kurios ist allerdings, dass ich den von FindBin ermittelten Pfad
> (beginnend mit 'home'..) auch schon vorher direkt in use lib angegeben habe
> und da hat es nicht geklappt...
genauso? beginnend mit 'home' ohne '/' davor ('/home/...')?
Joergen