use strict; use warnings; use Data::Dumper; my @files = qw( 12774L1_LacZ.SEE.rc_C06_2008-12-01.ab1 12774L1_pgK.Neo.2fw_D06_2008-12-01.ab1 12774L1_SD_B06_2008-12-01.ab1 12774L1_SU_A06_2008-12-01.ab1 foo.bar ); print Dumper(\@files); @files = grep /^(\d+\D\d)_(LacZ|pgK|SD|SU)(.*)$/,@files; print Dumper(\@files); __END__ $VAR1 = [ '12774L1_LacZ.SEE.rc_C06_2008-12-01.ab1', '12774L1_pgK.Neo.2fw_D06_2008-12-01.ab1', '12774L1_SD_B06_2008-12-01.ab1', '12774L1_SU_A06_2008-12-01.ab1', 'foo.bar' ]; $VAR1 = [ '12774L1_LacZ.SEE.rc_C06_2008-12-01.ab1', '12774L1_pgK.Neo.2fw_D06_2008-12-01.ab1', '12774L1_SD_B06_2008-12-01.ab1', '12774L1_SU_A06_2008-12-01.ab1' ];