#!/usr/bin/perl use strict; use warnings; use feature 'say'; use Data::Dumper; my @data1 = ( ['Aspergillus_clavatus_1', 'XP_001276684.1', 'pectate lyase, putative [Aspergillus clavatus NRRL 1]'], ['Aspergillus_fumigatus_2', 'XP_001276694.1', 'conserved hypothetical protein [Aspergillus fumigatus NRRL 1]'], ['Aspergillus_flavus_3', 'XP_001276726.1', 'tyrosinase central domain protein [Aspergillus flavus NRRL 1]'], ['Aspergillus_terreus_4', 'XP_001276738.1', 'endoglucanase, putative [Aspergillus terreus NRRL 1]'] ); my %data1; for my $record ( @data1 ) { my ( $old, $new, $text ) = @{ $record }; $data1{ $old } = { new => $new, text => $text }; } my @data2 = ( ['Aspergillus_clavatus_1', 'Aspergillus_flavus_198', 'Aspergillus_terreus_166', 'Aspergillus_fumigatus_2'], ['Aspergillus_clavatus_1', 'Aspergillus_flavus_3', 'Aspergillus_terreus_4', 'Aspergillus_fumigatus_2'], ['Aspergillus_clavatus_3', 'Aspergillus_flavus_198', 'Aspergillus_terreu_166', 'Aspergillus_fumigatus_16'] ); my @results; for my $row ( @data2 ) { my $lookup = shift @{ $row }; push @results, exists $data1{ $lookup } ? join "\t", $data1{ $lookup }->{'new'}, $data1{ $lookup }->{'text'}, join "\t", @{ $row } : join "\t", $lookup, join "\t", @{ $row }; } say Dumper \@results; __END__ #### $VAR1 = [ 'XP_001276684.1 pectate lyase, putative [Aspergillus clavatus NRRL 1] Aspergillus_flavus_198 Aspergillus_terreus_166 Aspergillus_fumigatus_2', 'XP_001276684.1 pectate lyase, putative [Aspergillus clavatus NRRL 1] Aspergillus_flavus_3 Aspergillus_terreus_4 Aspergillus_fumigatus_2', 'Aspergillus_clavatus_3 Aspergillus_flavus_198 Aspergillus_terreu_166 Aspergillus_fumigatus_16' ];