And now a comment about simplifying things. I don't advocate Class::DBI or any of the other SQL abstraction modules - but you can cleanup your SQL generation.
Try this:
$table =~ tr/A-Za-z0-9_//cd;
my @fields = keys %columns;
my @values = values %columns; # or @columns{@fields}
my $sql = "INSERT INTO $table ("
.join(", ", @fields)
.") VALUES ("
.join(", ", ("?") x @fields)
.")";
my $sth = $dbh->prepare($sql) || die $DBI::Errstr;
$sth->execute(@values) || die $DBI::Errstr;
my @a=qw(random brilliant braindead); print $a[rand(@a)];