my @genes = qw( Gene1 Gene2 Gene3 Gene4 Gene5 Gene6 ); my @raw_files = ( "Gene1 Gene2 Gene3", "Gene2 Gene3 Gene4", "Gene3 Gene4 Gene5" ); my $gene_num = 1; print "Gene", $gene_num++, " @{$_}\n" for sub { my @in_file = map { { map { $_ => 0 } split " ", $_ } } @{+shift}; map { my $gene = $_; [ map { ~~exists $_->{$gene} } @in_file ] } @{+shift}; }->( \@raw_files, \@genes );