fields-Pragma

fields-Pragma

am 19.02.2007 10:11:56 von Ferry Bolhar

Hallo,

ich versuche, mit dem fields Pragma zu arbeiten:

in Test.pm:

package Alpha;

use fields qw(alpha beta gamma);


in Test.pl:

use Test;

my Alpha $var;

$var->{alpha} = 4;


Das liefert (zur Laufzeit):

Not an ARRAY reference in Test.pl line 5

(Also in der Zeile mit der Zuweisung)

Was mache ich falsch?

PS: perl 5.8.8 auf Linux Fedora 4 (tritt aber mit ActiveState 5.8.6 auf
W2000 genauso auf).

Danke für eure Hilfe & LG, Ferry

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

Re: fields-Pragma

am 19.02.2007 21:22:54 von Slaven Rezic

"Ferry Bolhar" writes:

> Hallo,
>
> ich versuche, mit dem fields Pragma zu arbeiten:
>
> in Test.pm:
>
> package Alpha;
>
> use fields qw(alpha beta gamma);
>
>
> in Test.pl:
>
> use Test;
>
> my Alpha $var;

Die Deklaration befreit dich *nicht* davon, auf einen Konstruktor
verzichten zu können. Du brauchst also:

my Alpha $var = Alpha->new;

samt entsprechender Definition von Alpha::new. Siehe perldoc fields.

>
> $var->{alpha} = 4;
>
>
> Das liefert (zur Laufzeit):
>
> Not an ARRAY reference in Test.pl line 5
>
> (Also in der Zeile mit der Zuweisung)
>
> Was mache ich falsch?
>
> PS: perl 5.8.8 auf Linux Fedora 4 (tritt aber mit ActiveState 5.8.6 auf
> W2000 genauso auf).
>
> Danke für eure Hilfe & LG, Ferry
>
> --
> Ing Ferry Bolhar
> Magistrat der Stadt Wien - MA 14
> A-1010 Wien
> E-Mail: bol@adv.magwien.gv.at
>
>

--
Slaven Rezic - slaven rezic de
BBBike - route planner for cyclists in Berlin
WWW version: http://www.bbbike.de
Perl/Tk version for Unix and Windows: http://bbbike.sourceforge.net

Re: fields-Pragma

am 22.02.2007 12:00:14 von Ferry Bolhar

Slaven Rezic:

> Die Deklaration befreit dich *nicht* davon, auf einen Konstruktor
> verzichten zu können. Du brauchst also:
>
> my Alpha $var = Alpha->new;
>
> samt entsprechender Definition von Alpha::new. Siehe perldoc fields.

Nein, brauche ich nicht. Ich hab mich jetzt ein bißchen rumgespielt
und festgestellt (und das macht auch das fields-Pragma), dass der
Skalar bereits eine Arrayreferenz sein muss, bevor man ihn zum
Zugriff auf den Pseudohash verwendet. Schreibt man

use Test;
my Alpha $var = []; # Leere Arrayreferenz zuweisen!

$var->{alpha} = 4;

dann funktionierts. Scheinbar führt der Perl-Core da intern ein

ref $var eq 'ARRAY'

durch und regt sich auf, falls diese Bedingung nicht erfüllt ist.

Geht also auch ganz ohne "new" Konstruktur - zumindest
noch in 5.8.8. In späteren Versionen soll da ja einiges anders
werden.

Schöne Grüße,

Ferry

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