# Given a list of column names build a placeholder list of the same length my @columns = ( 'customer_ID', 'reference1', 'foo', ... ); my $placeholders = join(", ", map { '?' } @columns); # Build the SQL statement my $SQL = "INSERT INTO myTable (" . join(", ", @columns) # column names . ") VALUES ($placeholders)"; my $STH = $DBH->prepare_cached($SQL); # Then if you have a reference to an array of values, use it like: my $rValues = [ 'Customer_1', 'ref5', 1, ... ]; $STH->execute(@$rValues); # Or you can hand it an array: my @values = ( 'Customer_2', 'ref99', 3, ... ); $STH->execute(@values); # or even just explicit values: $STH->execute("Customer 5", "ref3", 7, ... );