The behaviour you are seeing is actually a feature of Data::Dumper - the
$VAR1->{'polished_data'}{'start'} is simply pointing to the first occurrence of what is exactly the same thing. It does this with all references:
use Data::Dumper;
use Time::Piece;
my $tp = gmtime;
my @array = (200,400);
my $data = {
'one' => {
'tp' => $tp,
'array' => \@array,
},
'two' => {
'tp' => $tp,
'array' => \@array,
},
};
print Dumper $data;
Output:
$VAR1 = {
'one' => {
'array' => [
[
200,
400
]
],
'tp' => bless( [
35,
2,
2,
24,
2,
'116',
4,
83,
0,
1458784955,
0
], 'Time::Piece' )
},
'two' => {
'array' => $VAR1->{'one'}{'array'},
'tp' => $VAR1->{'one'}{'tp'}
}
};
To prevent it from doing that you can set Deepcopy:
use Data::Dumper;
$Data::Dumper::Deepcopy = 1;
...
Output:
$VAR1 = {
'one' => {
'array' => [
[
200,
400
]
],
'tp' => bless( [
48,
10,
2,
24,
2,
'116',
4,
83,
0,
1458785448,
0
], 'Time::Piece' )
},
'two' => {
'array' => [
[
200,
400
]
],
'tp' => bless( [
48,
10,
2,
24,
2,
'116',
4,
83,
0,
1458785448,
0
], 'Time::Piece' )
}
};