use lib auf Webserver

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 funktionier=
en
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....

Gruss, Helmut
helmut_nospam [ Sa, 11 November 2006 20:34 ] [ ID #1532383 ]

Re: use lib auf Webserver

helmut_nospam [at] 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 <at> rezic <dot> de

need xpm or ppm output from GD?
http://search.cpan.org/search?mode=module&query=GD::Convert
Slaven Rezic [ Sa, 11 November 2006 21:22 ] [ ID #1532384 ]

Re: use lib auf Webserver

Slaven Rezic wrote:
> helmut_nospam [at] 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 [at] 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
Frank Seitz [ Sa, 11 November 2006 21:43 ] [ ID #1532385 ]

Re: use lib auf Webserver

On 2006-11-11 20:22, Slaven Rezic <slaven [at] rezic.de> wrote:
> helmut_nospam [at] 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( [at] ISA [at] EXPORT);
[at] ISA = qw(Exporter);
[at] 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 [at] INC ( [at] 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 [at] hjp.at | Was sonst wäre der Sinn des Erfindens?
__/ | http://www.hjp.at/ | -- P. Einstein u. V. Gringmuth in desd
hjp-usenet2 [ Sa, 11 November 2006 22:52 ] [ ID #1532386 ]

Re: use lib auf Webserver

In article <87u015d983.fsf [at] biokovo.herceg.de>, slaven [at] 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!
helmut_nospam [ So, 12 November 2006 11:08 ] [ ID #1533074 ]

Re: use lib auf Webserver

In article <87u015d983.fsf [at] biokovo.herceg.de>, slaven [at] 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...

Gruss, Helmut
helmut_nospam [ So, 12 November 2006 11:54 ] [ ID #1533075 ]

Re: use lib auf Webserver

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.
Michael Perle [ So, 12 November 2006 13:12 ] [ ID #1533076 ]

Re: use lib auf Webserver

Helmut Blass schrieb:
> In article <87u015d983.fsf [at] biokovo.herceg.de>, slaven [at] 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
Joergen Lang [ Di, 14 November 2006 01:58 ] [ ID #1535745 ]
Perl » de.comp.lang.perl.misc » use lib auf Webserver

Vorheriges Thema: Selektierten Text ausgeben
Nächstes Thema: LWP und POST und Datei Upload