my $placeholderstr = join('', map {'?,'} keys %$c); chop $placeholderstr; my $sth = $dbh->prepare( 'INSERT INTO table(' . join(',', keys %$c) . ") VALUES ($placeholderstr)" ); $sth->execute(values %$c) or die $dbh->errstr;