Falls du das gleiche aus irgendwelchen Gründen doch per splice machen möchtest:
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.