fields-Pragma

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 [at] adv.magwien.gv.at
Ferry Bolhar [ Mo, 19 Februar 2007 10:11 ] [ ID #1634103 ]

Re: fields-Pragma

"Ferry Bolhar" <bol [at] adv.magwien.gv.at> 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 [at] adv.magwien.gv.at
>
>

--
Slaven Rezic - slaven <at> rezic <dot> 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
Slaven Rezic [ Mo, 19 Februar 2007 21:22 ] [ ID #1634112 ]

Re: fields-Pragma

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 [at] adv.magwien.gv.at
Ferry Bolhar [ Do, 22 Februar 2007 12:00 ] [ ID #1639141 ]
Perl » de.comp.lang.perl.misc » fields-Pragma

Vorheriges Thema: Boss/Worker Pattern in Perl?
Nächstes Thema: undefined subroutine