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