in reply to sub ($self,$var,@arr) {}

Something along this line is being discussed for perl6 but as you have discovered from other posts most perl types ho-hum it. =) It has the same potential issue as prototypes where the first scalar might cause an array to be cast into scalar form:
sub popntuple1 ($one, @two) { return $one, \@two; } sub popntuple2 () { my ($one, @two) = @_; return $one, \@two) } my @a = ( 1, 2, 3, 4); my @b = ( 6, 7, 8, 9); ($p, $t) = popntuple1(@a,@b); ($pp, $tt)=popntuple2(@a,@b);

If the scalar causes a cast, you get 4, (6,7,8,9) otherwise you get 1, (2,3,4,6,7,8,9). And if it doesn't cast, what did it save you?

--
$you = new YOU;
honk() if $you->love(perl)