my $ref_time = time(); my $ref_delta = $serverRef->{ScanErrlogLastDays}*24*3600; while () { next unless ( /^\s*([\d\/\-]+\s+[\d\.\:]+)\s+/ ); next if ( $ref_time - str2time( $1 ) > $ref_delta ); $ref->{start_check_datetime} = $1; # put all the stuff from the second while loop here } # all done, and you didn't miss the first record #### my $seeking = 1; my $ref_time = time(); my $ref_delta = $serverRef->{ScanErrlogLastDays}*24*3600; while () { if ( $seeking ) { next unless ( /^\s*([\d\/\-]+\s+[\d\.\:]+)\s+/ ); next if ( $ref_time - str2time( $1 ) > $ref_delta ); $ref->{start_check_datetime} = $1; $seeking = 0; } # put all the stuff from the second while loop here }