in reply to Re^4: Dereferencing arrays
in thread <SOLVED>Dereferencing arrays
Because you cannot pass arrays to subroutines; you can only pass a (single) list.
This reality stems from this:
( @a, @b ) = (1..10, 'a'..'b'); print @a;; 1 2 3 4 5 6 7 8 9 10 a b print @b;;
There is nothing to delimit the two different lists on the right hand side; so everything -- the numbers and the letters -- gets assigned to @a; nothing to @b;
Similarly, when you do this:
someFunction( @a, @b, $c );
All the items from both arrays and the single scalar get concatenated into a single list, which inside the function you address as the array @_.
When you assign @_ to two arrays and a scalar inside your function:
my ( @groupA, @groupB, $dataRef ) = @_;
The information about which elements of @_ came from which argument has been lost; so everything gets assigned to @groupA and nothing to the other two variables.
Hence if you want to pass multiple arrays (or hashes; or combination thereof) to a function, you have to pass references to them and dereference internally.
It might sound like a limitation, but once you start using your function to sort arrays of any size, you'll be glad of the efficiency that results.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^6: Dereferencing arrays
by divitto (Novice) on Mar 19, 2014 at 21:27 UTC | |
by BrowserUk (Patriarch) on Mar 20, 2014 at 03:26 UTC |