use strict; my (@fields, @data); while () { chomp; my ($field, $value) = split; next if !defined $value; push @fields, $field; push @data, $value; } my $insert = "INSERT INTO foo (" . join(",", @fields) . ") VALUES (" . join(",", map { qq("$_") } @data) . ");"; print "$insert\n"; __DATA__ col1 data_line1 col2 data_line2 col3 data_line3 data_line4 data_line5 data_line6 col4 data_line7 #### my $fieldlist = join(",", @fields); my $placeholders = join(",", map {'?'} @fields); my $insert = qq{ INSERT INTO foo ($fieldlist) VALUES ($placeholders)};