Konstante als Referenz auf anonymen Hash
Konstante als Referenz auf anonymen Hash
am 02.05.2007 13:01:01 von Robert Meissner
Hallo!
Ich habe folgende Konstante, die eine Referenz auf einen anonymen
Hash darstellt.
use constant ABC => {
'a' => '1',
'b' => '2',
'c' => '3',
};
Über 'print ABC->{'a'}' kann ich nun auf die einzelnen Elemente
zugreifen.
Wie kann ich aber z.B. mit einer foreach Schleife über alle im
Hash vorhandene Elemente iterieren, wenn die Referenz über eine
Konstante gespeichert ist?
foreach my $keys (keys ABC) {
^^^^^^^^^^
?
print "$keys\n";
}
Danke für Antworten!
MfG
Robert
Re: Konstante als Referenz auf anonymen Hash
am 02.05.2007 13:10:20 von Mirco Wahab
Robert Meissner wrote:
> use constant ABC => {
> 'a' => '1',
> 'b' => '2',
> 'c' => '3',
> };
>
> Über 'print ABC->{'a'}' kann ich nun auf die einzelnen Elemente
> zugreifen.
>
> Wie kann ich aber z.B. mit einer foreach Schleife über alle im
> Hash vorhandene Elemente iterieren, wenn die Referenz über eine
> Konstante gespeichert ist?
> foreach my $keys (keys ABC) {
> ^^^^^^^^^^
> ?
> print "$keys\n";
> }
foreach my $key (keys %{ABC()}) {
print "$key\n";
}
oder
foreach my $key (keys %{&ABC}) {
print "$key\n";
}
(ABC ist ein 'coderef')
Viele Grüße
M.
Re: Konstante als Referenz auf anonymen Hash
am 02.05.2007 13:26:17 von Christian Winter
Robert Meissner schrieb:
> Ich habe folgende Konstante, die eine Referenz auf einen anonymen
> Hash darstellt.
>
> use constant ABC => {
> 'a' => '1',
> 'b' => '2',
> 'c' => '3',
> };
>
> Über 'print ABC->{'a'}' kann ich nun auf die einzelnen Elemente
> zugreifen.
>
> Wie kann ich aber z.B. mit einer foreach Schleife über alle im
> Hash vorhandene Elemente iterieren, wenn die Referenz über eine
> Konstante gespeichert ist?
>
> foreach my $keys (keys ABC) {
> ^^^^^^^^^^
> ?
> print "$keys\n";
> }
Das Dereferenzieren von Konstanten geht eigentlich wie bei Variablen
(Voranstellen des Typs und Umschließen mit geschweiften Klammern),
allerdings muss man Perl noch mal nachdrücklich darauf hinweisen dass
hier keine String-Interpretation angesagt ist.
foreach my $keys ( keys %{(ABC)} ) {
foreach my $keys ( keys %{ABC()} ) {
foreach my $keys ( keys %{+ABC} ) {
sind dazu möglich Ansätze.
-Christian
Re: Konstante als Referenz auf anonymen Hash
am 02.05.2007 14:05:39 von Robert Berghaus
Hallo Robert
Robert Meissner schrieb:
> Hallo!
>=20
> Ich habe folgende Konstante, die eine Referenz auf einen anonymen=20
> Hash darstellt.
>=20
> use constant ABC =3D> {
> 'a' =3D> '1',
> 'b' =3D> '2',
> 'c' =3D> '3',
> };
>=20
> Über 'print ABC->{'a'}' kann ich nun auf die einzelnen Elemente=20
> zugreifen.
>=20
> Wie kann ich aber z.B. mit einer foreach Schleife über alle im=20
> Hash vorhandene Elemente iterieren, wenn die Referenz über eine=20
> Konstante gespeichert ist?
>=20
> foreach my $keys (keys ABC) {
> ^^^^^^^^^^
> ?
> print "$keys\n";
> }
>=20
Ich benutze Konstanten zwar relativ selten (und dann auch nur=20
Scalare), aber das funktioniert bei mir:
my($ra) =3D ABC;
foreach my $keys (keys %{$ra}) {
print "$keys\n";
}
Mit ABC habe ich es auf die Schnelle auch nicht hinbekommen.
Schönen Gruß aus dem Bergischen Land
Robert
Re: Konstante als Referenz auf anonymen Hash
am 02.05.2007 14:16:10 von Frank Seitz
Christian Winter wrote:
> Robert Meissner schrieb:
>>
>>Wie kann ich aber z.B. mit einer foreach Schleife über alle im
>>Hash vorhandene Elemente iterieren, wenn die Referenz über eine
>>Konstante gespeichert ist?
>>
>> foreach my $keys (keys ABC) {
>> ^^^^^^^^^^
>> ?
>> print "$keys\n";
>> }
>
> Das Dereferenzieren von Konstanten geht eigentlich wie bei Variablen
> (Voranstellen des Typs und Umschließen mit geschweiften Klammern),
> allerdings muss man Perl noch mal nachdrücklich darauf hinweisen dass
> hier keine String-Interpretation angesagt ist.
^^^^^^^^^^^^^^^^^^^^^
Ist es das?
> foreach my $keys ( keys %{(ABC)} ) {
> foreach my $keys ( keys %{ABC()} ) {
> foreach my $keys ( keys %{+ABC} ) {
>
> sind dazu möglich Ansätze.
Mein spontaner Eindruck ist, dass Perl sich hier
ein bisschen doof anstellt. Eigentlich schreibt doch niemand
%{ABC}, wenn er %ABC meint.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Konstante als Referenz auf anonymen Hash
am 02.05.2007 14:45:19 von Robert Meissner
Christian Winter schrieb:
> foreach my $keys ( keys %{(ABC)} ) {
> foreach my $keys ( keys %{ABC()} ) {
> foreach my $keys ( keys %{+ABC} ) {
Wunderbar. Danke für die Antworten!
MfG
Robert