#!/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