my @wanted; opendir my $dh, $dir or die "Failed opening $dir: $!"; foreach (readdir $dh) { next unless /^tim(\d+)/; my $num = $1; push @wanted, $_ if $num > 14 and $num < 51; } closedir $dh; #### my @tim_file = do { opendir my $dh, $dir or die "Failed opening $dir: $!"; grep { my ($num) = /^tim(\d+)/; defined $num and $num > 14 and $num < 51; } readdir $dh; };