Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re: Changing an array from a sub

by Marshall (Abbot)
on Feb 13, 2018 at 07:55 UTC ( #1209047=note: print w/replies, xml ) Need Help??

in reply to Changing an array from a sub

Of your test cases, I think this one is the most important to understand:
use strict; use warnings; my @A = (0) x 20; PrintA(); ChangeArray5(\@A); PrintA(); sub ChangeArray5 { my $B = shift; # I don't understand this, but it works :P foreach my $X (@$B) { $X = 5; } } sub PrintA { print "\n".join('', @A); } __END__ Prints: 00000000000000000000 55555555555555555555
$B is a reference to the @A array. When it is de-referenced, you get an alias to the original array - not a copy of the original array - you are accessing the original array itself. Huge arrays can be passed to subroutines and modified in this way.

If you want to operate upon a copy, then my @copy = (@$B) and iterate over @copy.
I guess as a side note, $a and $b have special meanings in Perl. I wouldn't use $A or $B due to possible confusion.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1209047]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2018-03-21 23:07 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (272 votes). Check out past polls.