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.
In reply to Re^5: Dereferencing arrays
by BrowserUk
in thread <SOLVED>Dereferencing arrays
by divitto
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |