Konstante als Referenz auf anonymen Hash

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
Robert Meissner [ Mi, 02 Mai 2007 13:01 ] [ ID #1703235 ]

Re: Konstante als Referenz auf anonymen Hash

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.
Mirco Wahab [ Mi, 02 Mai 2007 13:10 ] [ ID #1703236 ]

Re: Konstante als Referenz auf anonymen Hash

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
Christian Winter [ Mi, 02 Mai 2007 13:26 ] [ ID #1703237 ]

Re: Konstante als Referenz auf anonymen Hash

Hallo Robert

Robert Meissner schrieb:
> Hallo!
>
> Ich habe folgende Konstante, die eine Referenz auf einen anonymen
> Hash darstellt.
>
> use constant ABC =3D> {
> 'a' =3D> '1',
> 'b' =3D> '2',
> 'c' =3D> '3',
> };
>
> =DCber '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";
> }
>

Ich benutze Konstanten zwar relativ selten (und dann auch nur
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
Robert Berghaus [ Mi, 02 Mai 2007 14:05 ] [ ID #1703238 ]

Re: Konstante als Referenz auf anonymen Hash

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
Frank Seitz [ Mi, 02 Mai 2007 14:16 ] [ ID #1703239 ]

Re: Konstante als Referenz auf anonymen Hash

Christian Winter <thepoet_nospam [at] arcor.de> schrieb:

> foreach my $keys ( keys %{(ABC)} ) {
> foreach my $keys ( keys %{ABC()} ) {
> foreach my $keys ( keys %{+ABC} ) {

Wunderbar. Danke für die Antworten!

MfG
Robert
Robert Meissner [ Mi, 02 Mai 2007 14:45 ] [ ID #1703241 ]
Perl » de.comp.lang.perl.misc » Konstante als Referenz auf anonymen Hash

Vorheriges Thema: Bug im Perl-Interpreter
Nächstes Thema: Win32 - Perl/Tk - Eingabe filtern mit validate im Entry-Widget