Thread Update eines mehrdimensionalen Arrays
(3 answers)
Opened by peterb at 2011-09-22 15:25
Falls du das gleiche aus irgendwelchen Gründen doch per splice machen möchtest:
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 use warnings; use strict; my @name1 = qw(Peter Bauer 32); my @name2 = qw(Marie Fink 43); my $name = "Peter"; my @namen_2d = (\@name1, \@name2); for (my $i=0; $i<=$#namen_2d; $i++){ print "$namen_2d[$i][0], $namen_2d[$i][1], $namen_2d[$i][2]\n"; } print "\n"; for (my $i=0; $i<=$#namen_2d; $i++){ if ($namen_2d[$i][0] eq $name){ print "Peter gefunden\n"; splice(@{$namen_2d[$i]},1,1,"Bauer-Weider") } } for (my $i=0; $i<=$#namen_2d; $i++){ print "$namen_2d[$i][0], $namen_2d[$i][1], $namen_2d[$i][2]\n"; } Generell gibt es in Perl keine wirklichen 2D-Arrays. In @name_2d stehen nur Referenzen auf die anderen beiden Arrays (siehe Zeile 8 - du kannst danach auch mal ein 'print "@name_2d\n";' reinsetzen). In dem splice-Befehl (Zeile 19) übergibst du jetzt den Array @namen_2d und willst das Element $i des Arrays, also eine Arrayreferenz ersetzen, was nicht richtig ist. Du musst ihm als den zu bearbeitenden Array eigentlich @name1 übergeben. Dazu kannst du die Arrayreferenz $name_2d[0] mit @{} dereferenzieren, also aus ihr wieder einen Array machen. Der Nachname steht da an erster Stelle, also statt $i die 1. |