Ich habe eine Frag die sich an Perl Profis richtet.
Ich möchte an eine Unterroutine (bzw. eine Methode eines
Packages)
eine Referenz als Parameter übergeben.
Da alle Parameter Schlüsselwortparameter sind sieht der Aufruf
folgendermaßen aus.
wieland::forms::combobox(‚name=box1‘,‚array=…‘)
Bist du sicher? Ich denke du meinst eher sowas wie
foo::bar::combobox(‚name‘=>‚box1‘,‚array‘=>$array_ref);
, oder doch
wieland::forms::combobox(‚name=box1‘,‚array=val1,val2,val3,val4…‘)
das wird manchmal gemacht, ist aber schlechter stil. (bzw. alter stil aus der zeit als perl noch keine referenzen kannte. also zeig ich dir mal wie man es richtig macht:
#
$scalar="skalarer wert";
@array=("a1","a2","a3");
%hash=("key1"=\>"val1", "key2"=\>"val2");
#
#referenzen erzeugen
#
$arrayref=\@array;
$hashref=\%hash;
#
# aufrufe (alle equiv.)
#
&foo ("skalar"=\>$scalar, "hash"=\>$hashref, "array"=\>$arrayref);
&foo ("skalar"=\>$scalar, "hash"=\>\$hash, "array"=\>\$array);
&foo ("skalar"=\>"skalarer wert", "hash"=\>{"key1"=\>"val1", "key2"=\>"val2"}, "array"=\>["a1","a2","a3"]);
#
#die funktion
#
sub foo {
%args = @\_;
$s=$args{"skalar"};
$aref=$args{"array"};
$href=$args{"hash"};
#ganzes array referenzieren
@a=@{$aref};
#direkter zugriff auf arrayelement mit referenzen
$wert=$aref-\>[2];
#ganzen hash
%h=%{$href};
#hashelement
$wert=$href-\>{"key1"};
}
cu, holli