in reply to Predefining sub Parameters

of course, you can't have an array as a second parameter if you expect scalar params later in the list, so you'd want to pass an arrayref to line things up like that.
You might check for appropriate values like this:
sub functionname { $a = shift; $b = shift; $c = shift; warn unless (ref \$a =~ /SCALAR/); warn unless (ref $b =~ /ARRAY/); warn unless (ref \$c =~ /SCALAR/); }
Or you might pass your data as a hash, and check that the appropriate keys are there.