Просто интересно, что я делаю что-то неправильно или если это ошибка perl ... Я хочу создать массив хеш-значений. Я использую «push», чтобы поместить значения в массив. Первая запись хэша в массив работает отлично, но когда я нажимаю второй хэш на массив, первый элемент массива, кажется, перезаписывается тем, что я только что нажал на массив. Почему это происходит? Смотрите код ниже:Почему толчок хэша на массив, кажется, переписывает все элементы массива?
use Data::Dumper;
my %val;
%val = (key1 => "Val1");
my @myArr;
my $cnt = push(@myArr,\%val);
print "After push (should contain 1 element): " . Dumper(@myArr) . "\n";
%val = (key2 => "Val2");
my $cnt = push(@myArr,\%val);
print "After push 2: (should contain 2 different elements):" . Dumper(@myArr) . "\n";
print " You can see above that element 1 and 2 of the array equal each other when they should be different\n";
Просто Sidenote. Но ваше «копирование» работает только в том случае, если хеш - это простой ключ к строковым значениям. Если% val содержит также arrayrefs или hashrefs, вам нужна «глубокая копия». Лучше всего использовать для этого модуль типа «Клон». http://search.cpan.org/perldoc?Clone –