in reply to Passing multiple data types to a subroutine

To pass a mixture of types, pass the non-scalar ones as references, e.g. CallSub(\@Array, $Igot, $TheBlues) and my ($PassedArrayRef, $Igot, $TheBlues) = @_. See perldoc perlreftut for a tutorial on using the array reference in the sub.

You can set a prototype on your function to automatically change @Array to \@Array in the caller, but I don't recommend that unless you know what you are doing; people often misunderstand what prototypes are actually for and expect more (or less) than they actually do.