my $alt = join '|', reverse sort <$matches_fh>;
my $re = qr{(?x: ^ > ( $alt ) )};
my %count;
/$re/ && ++$count{$1} while <$fasta_fh>;
####
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dump;
use Inline::Files;
my $alt = join '|', reverse sort ;
my $re = qr{(?x: ^ > ( $alt ) )};
my %count;
/$re/ && ++$count{$1} while ;
dd \%count;
__MATCHES__
Gloin1
XYZ1
XYZ
XYZ12
__FASTA__
>Gloin1_1
unwanted data
>XYZ_1
unwanted data
>XYZ12_1
unwanted data
>XYZ1_2
unwanted data
>XYZ1_1
unwanted data
>XYZ12_3
unwanted data
>Gloin1_2
unwanted data
>XYZ12_2
unwanted data
##
##
{ Gloin1 => 2, XYZ => 1, XYZ1 => 2, XYZ12 => 3 }