Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery

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 imbibing at the Monastery: (6)
As of 2018-06-22 21:50 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (124 votes). Check out past polls.