my @genes = qw( Gene1 Gene2 Gene3 Gene4 Gene5 Gene6 ); my @raw_files = ( "Gene1 Gene2 Gene3", "Gene2 Gene3 Gene4", "Gene3 Gene4 Gene5", ); my @gene_in_files = map { my %content; @content{ split " ", $_ } = (); \%content; } @raw_files; my @gene_matrix = map { my $gene = $_; [ map { ~~exists $_->{$gene} } @gene_in_files ] } @genes; print "Gene", $_+1, " @{$gene_matrix[$_]}\n" for 0 .. $#gene_matrix; #### Gene1 1 0 0 Gene2 1 1 0 Gene3 1 1 1 Gene4 0 1 1 Gene5 0 0 1 Gene6 0 0 0 #### [shift-insert, to paste output from my terminal] #### 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 );