Perl is just too dynamic. The biggest obstacle is that you can often not know whether you're getting a list or scalar - much like in your example. It gets a whole lot worse when you say something like
add(numbers($foo)) and
numbers() can return anything from one invocation to the next.
Makeshifts last the longest.