my $data = [ { col1 => 'data1', col3 => 'data3' }, { col2 => 'data2', col3 => 'data3plus' }, ]; if( ! @columns ) { # Collect all (potential) columns we want to write my %columns; for( @$data ) { $columns{ $_ } = 1 for keys %$_; } @columns = sort keys %columns; }; my $columns = join ",", map { qq("$_") } @columns; my $placeholders = join ",", ("?") x @columns; # Run the insert statement for each row in our list my $sql_insert = qq(insert into "$table" ($columns) values ($placeholders));