use SQL::Abstract; my $sql = SQL::Abstract->new; my %data; @data{@columns} = @values; #hash slice to get column=>value pairs my($sql, @bind) = $sql->insert($table, \%data); $dbh->do($sql, {}, @bind);