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