in reply to Spotting an empty array as argument

You can't pass arrays (or hashes) to subs, only a sequence of zero or more scalars. There is no difference between

f(@a)
and
f($a[0], $a[1], $a[2], ...)

so you can't distinguish

my @empty; f(@empty)
from
f()

At best, you can use prototypes to change what scalars are passed to a sub.

sub f(;\@)
will allow
f(@a) # Calls &f(\@a)
and
f() # Calls &f()
but not
f($x, $y)

What you want to achieve, however, can't be achieved using prototypes. You'd have to use something like Devel::CallParser.

Seeking work! You can reach me at ikegami@adaelis.com