JPH wrote:
Hi all,
Hello,
I am passin a two-dimensional array to a sub and when the sub returns,
the original array has changed. Eventually I want to pass the array into
a recursive sub, so I want to find a way to circumvent this behaviour.
Notice how my global is "@a" and the sub local is "@b"
- Why is this happening
- How can I properly pass a two dimensional array to a sub, without the
array in main changing?
Ideas anyone?
Change your subroutine so that it does not modify the array values?
Here is the minimal script to reproduce my finding:
=============
#!/usr/bin/perl
use warnings;
use strict;
sub try {
my @b = @_;
$b[ 0 ][ 1 ] = "7";
return 3;
}
my @a;
$a[ 0 ][ 1 ] = " ";
Or more simply:
my @a = [ undef, " " ];
print "Before: " . $a[ 0 ][ 1 ] . "\n";
try( @a );
print "After: " . $a[ 0 ][ 1 ] . "\n";
exit;
=============
What happens:
Before:
After: 7
=============
What I would expect:
Before:
After: 0
If you originally assign " " to $a[ 0 ][ 1 ] why would you now expect it
to contain 0?
John
--
Any intelligent fool can make things bigger and
more complex... It takes a touch of genius -
and a lot of courage to move in the opposite
direction. -- Albert Einstein
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/