Thread Frage zu Arrays und Hashes (13 answers)
Opened by Fragensteller at 2012-08-03 09:46

payx
 2012-08-03 10:18
#160552 #160552
User since
2006-05-04
564 articles
BenutzerIn

user image
Hallo Fragensteller,

um zu sehen, was in @aRegeln steht, schreibe:
Code (perl): (dl )
1
2
use Data::Dumper;
print Dumper \@aRegeln;


Benutze auf jeden Fall use strict; und use warnings;.

Was willst Du in Deinem Beispiel machen?

Du hast einen Hash %hGlobal, mit einem Schlüssel rules. Dieser soll offenbar das Array mit den Regelsätzen aufnehmen, die ihrerseits Arrays sind. Das ist eine komplexe Datenstruktur, die sehr wohl sinnvoll sein kann. Du kommst aber nicht darum herum, Dich in Datenstrukturen einzuarbeiten: perldoc perdsc oder z.B. Wiki:FaqTypen.

Erstmal Dein Ansatz:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my %hGlobal;

my @aRegel0 = qw ( foo0 bar0 );
my @aRegel1 = qw ( foo1 bar1 );
my @aRegel2 = qw ( foo2 bar2 );
my @aRegel3 = qw ( foo3 bar3 );

@{$hGlobal{rules}} = (
    @aRegel0,
    @aRegel1,
    @aRegel2,
    @aRegel3
);

#my @aRegeln = @{$hGlobal{rules}}; # wozu?

print Dumper \%hGlobal; # Die ganze Datenstruktur

print $hGlobal{rules}->[0]; # Zugriff auf einen Wert


Die Regeln stehen einfach alle nacheinander in dem einen Array. (Da Du weißt, dass sie immer ein Paar bilden, kannst Du so trotzdem darauf zugreifen. Du kannst sogar leicht einen Hash daraus erzeugen, in dem die Regeln als Key-Value-Paare enthalten sind: my %hRegeln = @{$hGlobal{rules}};)

Was du vermutlich wolltest, sind ArrayRefs:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my %hGlobal;

my @aRegel0 = qw ( foo0 bar0 );
my @aRegel1 = qw ( foo1 bar1 );
my @aRegel2 = qw ( foo2 bar2 );
my @aRegel3 = qw ( foo3 bar3 );

@{$hGlobal{rules}} = (
    \@aRegel0,
    \@aRegel1,
    \@aRegel2,
    \@aRegel3
);

print Dumper \%hGlobal; # Die ganze Datenstruktur

print $hGlobal{rules}->[0]->[0]; # Zugriff auf einen Wert


HTH
Grüße
payx

View full thread Frage zu Arrays und Hashes