Thread Update eines mehrdimensionalen Arrays (3 answers)
Opened by peterb at 2011-09-22 15:25

Sven_123
 2011-09-22 17:07
#152595 #152595
User since
2010-06-01
120 Artikel
BenutzerIn
[default_avatar]
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.

View full thread Update eines mehrdimensionalen Arrays