If you don't pass anything on the command line @ARGV is an empty list. Databases allow NULL values and DBI represents a NULL as undef. When DBI evaluates @ARGV it autovivifies as many parameters as it needs. So what you're actually doing is binding NULL (undef) to each parameter.

Update:

Oops.. or according to runrig I could be entirely wrong.... Hehe (or maybe not entirely).

Update 2:

Well it appears DBD::Pg, DBD::mysql, and DBD::ODBC must all be off then. I just went through and tested them. In each case NULL was being bound to the parameters. But passing a list with even just undef in it throws an error. I guess that means autoviv isn't taking place? (Heh, I should have stuck with just admining DBMSs)

When DBI evaluates @ARGV it autovivifies as many parameters as it needs.

Not true. (And since I'm posting this after your update, yes, you are wrong :-)
When I do $sth->execute(@ARGV) with an empty @ARGV to a DBD::Oracle prepared statement with a placeholder, I get an Oracle error.

Update:Well, I guess that's the
way some of 'em do it. But that won't stop me
from this:

<rant>That's a silly-ass way of doing it!
undefined != missing - they're all wrong IMNSHO!
Whack'em all over the head w/a clue-by-four!</rant>