use strict; use warnings; use Data::Dumper; my @GI = ( 'gi|Q384722390|emb|WP_938420210.1|Gene name', 'gi|342546780|emb|WP_934203412.1|Gene name', ); my @Accession = ( 'WP_938420210.1', 'WP_934203412.1' ); for my $match (@Accession) { my @found = grep /$match/, @GI; print "$match\n", Dumper [ split /\|/, $_ ] for @found; }