elrond
01-07-2008, 16:31
hallo,
ich habe folgendes problem:
Ich versuche in einem script eine kopie von einem hash zu erzeugen und schreibend darauf zuzugreifen. Funktioniert, aber auch das Original ändert sich.. :confused:
ich hab das mal in ein testscript gepackt
#!/usr/bin/perl -w
use Data::Dumper;
my %h_1=();
$h_1{'a'}{'b'}{'c'}='text';
print "-- h_1 nach erster zuweisung-----------\n";
print Dumper(%h_1);
my %h_2=%h_1;
print "-- h_2 nach kopie-----------\n";
print Dumper(%h_2);
$h_2{'a'}{'b'}{'c'}='text2';
print "-- h_2 nach zuweisung-----------\n";
print Dumper(%h_2);
print "-- h_1 nach zuweisung-----------\n";
print Dumper(%h_1);
Ausgabe:
-- h_1 nach erster zuweisung-----------
$VAR1 = 'a';
$VAR2 = {
'b' => {
'c' => 'text'
}
};
-- h_2 nach kopie-----------
$VAR1 = 'a';
$VAR2 = {
'b' => {
'c' => 'text'
}
};
-- h_2 nach zuweisung-----------
$VAR1 = 'a';
$VAR2 = {
'b' => {
'c' => 'text2'
}
};
-- h_1 nach zuweisung-----------
$VAR1 = 'a';
$VAR2 = {
'b' => {
'c' => 'text2'
}
};
für mich muß aber %h_1 seinen wert behalten, den es zum zeitpunkt der kopie hatte, da %h_1 immer wieder als original herhalten soll...
habt ihr einen tipp für mich?
ich habe folgendes problem:
Ich versuche in einem script eine kopie von einem hash zu erzeugen und schreibend darauf zuzugreifen. Funktioniert, aber auch das Original ändert sich.. :confused:
ich hab das mal in ein testscript gepackt
#!/usr/bin/perl -w
use Data::Dumper;
my %h_1=();
$h_1{'a'}{'b'}{'c'}='text';
print "-- h_1 nach erster zuweisung-----------\n";
print Dumper(%h_1);
my %h_2=%h_1;
print "-- h_2 nach kopie-----------\n";
print Dumper(%h_2);
$h_2{'a'}{'b'}{'c'}='text2';
print "-- h_2 nach zuweisung-----------\n";
print Dumper(%h_2);
print "-- h_1 nach zuweisung-----------\n";
print Dumper(%h_1);
Ausgabe:
-- h_1 nach erster zuweisung-----------
$VAR1 = 'a';
$VAR2 = {
'b' => {
'c' => 'text'
}
};
-- h_2 nach kopie-----------
$VAR1 = 'a';
$VAR2 = {
'b' => {
'c' => 'text'
}
};
-- h_2 nach zuweisung-----------
$VAR1 = 'a';
$VAR2 = {
'b' => {
'c' => 'text2'
}
};
-- h_1 nach zuweisung-----------
$VAR1 = 'a';
$VAR2 = {
'b' => {
'c' => 'text2'
}
};
für mich muß aber %h_1 seinen wert behalten, den es zum zeitpunkt der kopie hatte, da %h_1 immer wieder als original herhalten soll...
habt ihr einen tipp für mich?