in reply to Passing multiple data types to a subroutine

In case you were thinking that this behaviour is bad, well, it's not. It's actually quite useful. If you get into a habit of passing your scalars first, and ONE list at the end, you can start doing some Lisp'ish stuff:
recurse(split('','Hello World')); sub recurse { my ($car,@cdr) = @_; print "$car\n"; @cdr and recurse(@cdr); }
But if you find yourself passing lots of different datatypes, then consider passing a hash instead. Just note that any values that are arrays or hashes must be passed as references:
foo( array => [0..9], scalar => 'Hello World', hash => {qw(foo bar baz qux)}, ); sub foo { my %args = @_; print 's: ', $args{scalar},"\n", 'a: ', join(',', @{$args{array}}),"\n", "h:\n", map "\t$_ => $args{hash}{$_}\n", keys %{$args{hash}}, ; }
Now you don't have to worry about what order you list the arguments. :)

jeffa

L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)