in reply to Recieving lists as arguments

When you pass an array as an argument to sub-routine it gets flattened. That is, as far as the sub-routine knows, its no longer an array, rather its now a list of its scalar elements. So shift will only get the first scalar in the array @_, not the entire list.

To illustrate:

@foo = (1,2,3); process_array(@foo); sub process_array { # the special @_ variable now holds (1,2,3), NOT (@foo) $var1 = shift; # $var1 will only get '1'. $var2 = shift; # $var2 will only get '2'. $var3 = shift; # $var3 will only get '3'. }
To assign the entire argument list you would have to code the sub-routine like this:
sub process_array { @args = @_; }
or using an array reference:
sub process_array { $args = \@_; }
Hope that helps.

Amel - f.k.a. - kel