Actually it shouldn't throw an error, here's why:
@ARGV == ()
Yep, that's the entire reason.
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)
#!/usr/bin/perl -w
use strict;
use DBI;
my $dbh = DBI->connect('dbi:connect_sting', 'user', 'pass', {RaiseErro
+r => 1});
my $sth = $dbh->prepare('insert into foo (bar, qux) values (?,?)');
$sth->execute( () );
$sth->finish;
$dbh->disconnect;