in reply to array copy question

Yes declaration of array reference has changed in 5.8. The code below will not compile under 5.8:
my @$ra_ret_save = @$ra_ret;
You do not have to declare array refence and copy from another array in two separate steps. You can do in one single step -
my $ra_ret_save = [ @$ra_ret ];
I have created a demo script below -
use strict; use warnings; use Data::Dumper; my $ra_ret = [ qw/ a b c d / ]; print Dumper($ra_ret); my $ra_ret_save = [ @$ra_ret ]; print Dumper($ra_ret_save);
And the output when run from 5.8 and 5.6 -
perl 5.8.0 ---------- $VAR1 = [ 'a', 'b', 'c', 'd' ]; $VAR1 = [ 'a', 'b', 'c', 'd' ]; perl 5.6.1 ---------- $VAR1 = [ 'a', 'b', 'c', 'd' ]; $VAR1 = [ 'a', 'b', 'c', 'd' ];