use strict; my %fnames; # use a hash to eliminate duplicates while () { if (/^(\w+_\d+)_\d+\w+/) { $fnames{$1} = 1; } } foreach (keys %fnames) { print "$_\n"; } __DATA__ smith_13_503_de7.p smith_13_502_de7.v jones_104_503_de7.p jones_104_502_de7.v