use Text::CSV_XS; my @rows; for my $line ( @something ) { if ( $line =~ /NRG\ location/) { my @row; my @fields; foreach my $bline (@blocklines) { my ($k, $v) = split '=', $bline; push @fields, $k; } my %lookup = map { $_ => 1 } @fields; for my $field ( @csvfieldlist ) { if ( exists $lookup{ $field } ) { push @row, 'yes'; } else { push @row, undef; } } push @rows, \@row; } } csv (in => \@rows, out => "file.csv", sep_char=> ";");