Reinhard Doberstein: Array mit Assoziativem Array

Beitrag lesen

HAllo,

das Array ist in der Tat falsch angelegt.

Ein Array in Perl ist grundsätzlich ein Array des Datentyps Scalar. Deswegen kann auch kein Array-Element ein (assoziatives) Array sein. Du löst das Problem, indem Du Referenzen auf den Hash erstellst, da Referenzen Skalare sind:

my @allUsers;
my $user;

my %tst1=("aaa" => "111", "bbb" => "222");
push(@allUsers, %tst1);
%tst1=("aaa" => "333", "bbb" => "444");
push(@allUsers, %tst1);

foreach $user (@allUsers) {
print $user->{aaa}.'; '.$user->{bbb}."\n";

while (($k, $v)=each(%{$user})) {
  printf "$k = $v\n";
}
}

Danke erstmal, das bringt mich schon etwas weiter. Es kommt aber noch nicht das korrekte Ergebnis. Bei beiden push's wird ja die Adresse von %tst1 gespeichert. D.h. beim Ausgeben kommt 333;444 + 333;444. Eben zweimal das was in %tst1 steht.

Tatsächlih wird %tst1 in einer Subroutine gefüllt, ich weiss nicht wieviele Einträge existieren, und wieviele Infopaare da jeweils drin sind. Ich müsste also jedesmal Platz für %tst1 schaffen, und spätestens wenn das Programm fertig ist diesen wieder freigeben. Also wie mit malloc() und free() in C. Sieht recht umständlich aus, wenn das überhaupt geht.

By
Reinhard