use warnings; use strict; my @files = qw( aaa_bbb_10.ddd.eee aaa_bbb_11.ddd.eee aaa_bbb_12.ddd.eee aaa_bbb_13.ddd.eee aaa_bbb_14.ddd.eee aaa_bbb_15.ddd.eee ); my $min = 12; my $max = 14; my @filtered = map {$_->[0]} grep {$_->[1] >= $min && $_->[1] <= $max} map {my ($time) = /(?:[^_]*_){2}(\d+)/; [$_, $time]} @files; print "@filtered"; #### aaa_bbb_12.ddd.eee aaa_bbb_13.ddd.eee aaa_bbb_14.ddd.eee