in reply to Changing an array from a sub
$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.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
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.
|
|---|