... my @Names = qw'A B C'; my @FullRecord = qw'A_1 D_4 C_3 F_6 B_2'; # prepare temporary dictionary my %h; @h{@Names} = (); my @DesiredRecord = grep exists $h{ [/^([^_]+)/]->[0] }, @FullRecord; print "@DesiredRecord\n"; ...