my @matched; foreach $file ( @filelist ) { # or a while loop... my ( $fdate, $ftime ) = ( $file =~ /(\d{6})(\d{6})$/ ); if ( ( $fdate >= $start_date ) && ( $fdate <= $end_date ) && ( $ftime >= $start_time ) && ( $ftime <= $end_time) ) { push @matched, $file; } }