dclone
принимает и возвращает ссылки.
#! /usr/bin/perl
use Storable qw/ dclone /;
my @array = ( [1 .. 3], qw/ apple orange banana / );
my $copy = dclone \@array;
print ref($copy), "\n";
Вывод программы выше ARRAY
, поэтому для получения глубоко клонированного массива используйте
my @copy = @{ dclone \@array };
Чтобы показать, что происходит без разыменования, вывод
my @copy = dclone \@array;
for (0 .. 4) {
print "$_: ",
(defined $copy[$_] ? $copy[$_] : "<undef>"),
"\n";
}
есть
0: ARRAY(0x1d396c8)
1: <undef>
2: <undef>
3: <undef>
4: <undef>
Таким образом, присвоение результата dclone
массиву приведет к созданию одноэлементного массива, а попытка получить любое значение, кроме нуля, приведет к неопределенному значению.