use lib auf Webserver

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