Um mein Problem zu verdeutlichen, habe ich ein vereinfachtes Script geschrieben, welches in etwa die selbe Situation produziert:
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
use Data::Dumper;
print "Content-Type: text/plain\n\n";@test1 = ("wert11","wert12");
@test2 = ("wert21","wert22");
@refarray = (\@test1,\@test2);
for($a=1 ; $a<=2 ; $a++){
my @testarray = @refarray;
print "Durchgang $a:\n";
for($i=0 ; $i<@testarray ; $i++){
push(@{$testarray[$i]},"add".$a.$i);
};
print Dumper(\@testarray)."\n\n";
};
print "Original-Array:\n";
print Dumper(\@refarray);
Ausgabe des Scriptes :
Durchgang 1:
$VAR1 = [
[
'wert11',
'wert12',
'add10'
],
[
'wert21',
'wert22',
'add11'
]
];Durchgang 2:
$VAR1 = [
[
'wert11',
'wert12',
'add10',
'add20'
],
[
'wert21',
'wert22',
'add11',
'add21'
]
];
Original-Array:
$VAR1 = [
[
'wert11',
'wert12',
'add10',
'add20'
],
[
'wert21',
'wert22',
'add11',
'add21'
]
];
gewünschte Ausgabe bei Durchlauf 2 sollte jedoch eigentlich folgendes kommen :
$VAR1 = [
[
'wert11',
'wert12',
'add20'
],
[
'wert21',
'wert22',
'add21'
]
];
ich kann nicht vermeiden Referenzen auf Arrays in einem Array zusammen zu stellen (das Modul HtmL::Template ist auf diesen Aufbau angewiesen)
Ich möchte jedoch im Laufe einer Schleife dem referenz-array (@refarray) weitere Werte hinzufügen. Jedoch soll in jedem Durchlauf der Schleife $a wieder die ursprüngliche Struktur des Referenzarrays verwendet werden.
Ich hatte gehofft , dass durch die Zuweisung von @refarray auf @testarray innerhalb der Schleife jedesmal das original verwendet wird. Jedoch musste ich feststellen, dass durch die verwendeten Referenzen jedesmal das original-Array manipuliert wird. (zu erkennen bei der Script-Ausgabe am letzten Dump des @refarray)
Datum: 08.02.2008-16:49
