Perl does not complain because there is a hash value whose key is 'id' (it autovivifies when you mention it). DBI doesn't complain because undef (NULL) is a valid thing to send as a parameter to execute.
update : See discussion on autovivification below.