in reply to Handling User Input

The problem is that once the range exception is caught and the user is prompted again, the format exception can't be caught.

Encapsulate getting the user input ($start_date = <>; chomp ($start_date);) and checking its format into one routine (e.g. get_date()) that you then call every time you need new/corrected input.  This way, the format checking would also happen every time...

(Update) Something like this:

sub get_date { my $prompt = shift; while (1) { print "$prompt (YYYYMMDD): "; my $date = <>; chomp $date; if ($date !~ (/\d{8}/)) { print "ERROR: Invalid format!\n"; } else { return $date; } } } my $today = ... my $start_date; while (1) { $start_date = get_date("Please enter the collection start date"); if ($start_date < 18960101) { print "ERROR: Data prior to 18960101 is not available!\n"; } elsif ($start_date > $today) { print "ERROR: Start date is in the future!\n"; } else { last; } } # ditto for $end_date