Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

array copy question

by smackdab (Pilgrim)
on Dec 08, 2003 at 22:02 UTC ( #313266=perlquestion: print w/ replies, xml ) Need Help??
smackdab has asked for the wisdom of the Perl Monks concerning the following question:

In 5.6 I was doing this to copy an array from an array ref:

my @$ra_ret_save = @$ra_ret;

5.8 doesn't like it and now I am doing:

my $ra_ret_save;
@{$ra_ret_save} = @{$ra_ret};

Was the orig wrong, what changed?

Comment on array copy question
Replies are listed 'Best First'.
Re: array copy question
by Roger (Parson) on Dec 08, 2003 at 22:49 UTC
    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' ];
Re: array copy question
by Roy Johnson (Monsignor) on Dec 08, 2003 at 22:26 UTC
    Just to be clear: the curlies are still not required, but you have to declare the reference ($ra_ret_save) separately from dereferencing it.
    my $ra_ret_save; @$ra_ret_save = @$ra_ret;
    If you really had a jones for doing it all at once:
    my $ra_ret_save = [@$ra_ret];

    The PerlMonk tr/// Advocate
Re: array copy question
by duff (Vicar) on Dec 08, 2003 at 22:10 UTC

    I don't think you are remembering the 5.6 code correctly. Most likely you had my @array = @{$array_ref};. If my @$foo did work with 5.6 is was a bug and what changed was that bug was fixed.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://313266]
Approved by diotalevi
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (6)
As of 2015-11-29 02:57 GMT
Find Nodes?
    Voting Booth?

    What would be the most significant thing to happen if a rope (or wire) tied the Earth and the Moon together?

    Results (746 votes), past polls