modul-einbindungs problematik

modul-einbindungs problematik

am 01.04.2007 09:44:09 von Patrick Bates

hellö!

ich arbeite seit jeher mit der methode, subroutinen in
modulen zu speichern, und diese mittels 'require' einzubinden.

nun bin ich auf ein unerklärliches phänomen gestossen:

ein cgi das funktioniert:


use PDF::API2;

$pdf = PDF::API2->new(-file => $datei);

montiere_logo();

$pdf->save;
$pdf->end;


sub montiere_logo {
my $photo = $page->gfx;
my $jpeg = $pdf->image_jpeg("/usr/local/share/apps/libs/logo.jpg");
$photo->image($jpeg,465,714,0.38);
}

das funktioniert auch einwandfrei.

lager ich jetzt das sub in eine externe datei aus und binde diese mit
require ein, erhalte ich folgende fehlermeldung:

Can't call method "isvirtual" on an undefined value at /usr/lib/perl5
/site_perl/5.8.6/PDF/API2/Content.pm line 1489

wie gesagt, das tritt nur auf, wenn das sub aus einer externen datei
mit require eingebunden ist!


greets
-/--\-
alex

Re: modul-einbindungs problematik

am 01.04.2007 12:51:38 von Uwe Voelker

Hallo Alexander,

> $pdf = PDF::API2->new(-file => $datei);
>
> montiere_logo();

Du mußt $pdf übergeben:

montiere_logo($pdf);

....

sub montiere_logo {
my ($pdf) = @_;
...
}

Tschüs,
Uwe


--
http://www.perl-uwe.de/ - Tipps und Tricks zu Perl und CPAN-Modulen
http://www.perl-uwe.de/blog/2007-03/template-im-template-tei l-2/
http://www.perl-uwe.de/blog/2007-03/skalar-oder-array-refere nz-gleich-behandeln/
http://www.perl-uwe.de/blog/2007-03/datenaustauch-perl-php-m it-php-serialization/

Re: modul-einbindungs problematik

am 01.04.2007 17:32:28 von Christian Winter

Uwe Voelker schrieb:
> Hallo Alexander,
>
>> $pdf = PDF::API2->new(-file => $datei);
>>
>> montiere_logo();
>
> Du mußt $pdf übergeben:
>
> montiere_logo($pdf);
>
> ...
>
> sub montiere_logo {
> my ($pdf) = @_;
> ...
> }

Achtung: Im Original-Posting wird $page nirgens gesetzt. Die
muss, falls das im Hauptscript erfolgt, ebenfalls übergeben
werden.

Via "do"/"require" eingebundene Code-Teile haben keinen Zugriff
auf lexikalische Variablen des einbindenden Scripts (was leider
leicht zu übersehen ist, weil es nur in der Doku von "do()"
mitten in einem längeren Textabschnitt steht).

-Christian

Re: modul-einbindungs problematik

am 02.04.2007 11:23:44 von Christian Winter

Christian Winter schrieb:
> Via "do"/"require" eingebundene Code-Teile haben keinen Zugriff
> auf lexikalische Variablen des einbindenden Scripts (was leider
> leicht zu übersehen ist, weil es nur in der Doku von "do()"
> mitten in einem längeren Textabschnitt steht).

JFTR: ab dem nächsten Perl Release steht ein Hinweis darauf auch in der
Doku von require().

Re: modul-einbindungs problematik

am 04.04.2007 08:20:06 von Ferry Bolhar

Christian Winter:

>> Via "do"/"require" eingebundene Code-Teile haben keinen Zugriff
>> auf lexikalische Variablen des einbindenden Scripts (was leider
>> leicht zu übersehen ist, weil es nur in der Doku von "do()"
>> mitten in einem längeren Textabschnitt steht).

Ganz allgemein: jede Datei repräsentiert einen eigenen Scope
(man kann sich den Inhalt einer Datei mit {...} umschlossen
vorstellen). Deklarationen, die Scopegrenzen unterliegen - und
lexikalische, mit "my" oder "state" deklarierte Variable zählen
dazu - gelten daher nur für Code in jener Datei, in der sie
vorkommen und daher sind solche Variable nicht von anderen
Dateien aus ansprechbar (obwohl sie dennoch weiterhin
existieren können).

Das neue POD-Dokument "perlscopetut", von dem ich hoffe,
dass es in einer der nächsten Perl-Releases schon dabei ist
(derzeit wird es gerade ins Englische übersetzt) erläutert
diesen Mechanismus wesentlich genauer.

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at

Re: modul-einbindungs problematik

am 04.04.2007 20:11:59 von Christian Winter

Ferry Bolhar schrieb:
> Das neue POD-Dokument "perlscopetut", von dem ich hoffe,
> dass es in einer der nächsten Perl-Releases schon dabei ist
> (derzeit wird es gerade ins Englische übersetzt) erläutert
> diesen Mechanismus wesentlich genauer.

Hast Du einen aktuellen Stand wie weit Wolfgang schon ist
mit der Übersetzung?

-Christian

Re: modul-einbindungs problematik

am 05.04.2007 09:37:04 von Ferry Bolhar

Christian Winter:

> Hast Du einen aktuellen Stand wie weit Wolfgang schon ist
> mit der Übersetzung?

Ah, ich sehe, du bist auch informiert...

Derzeit sind ca. 20% übersetzt, es ist ein ziemlich langes
Dokument (fast 160 kB). Ich werde bei Wolfgang wieder
mal anfragen, wie weit er ist...

Übrigens übersetzt er es nicht alleine, es gibt jemanden
aus der p5p, der ihm dabei hilft. Aber gut Ding braucht
eben Weile...

Aber falls jemand Interesse hat, kann ich ihm die deutsche
Version schon gerne vorab zukommen lassen!

Schöne Grüße,

Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at