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
In reply to Re: Handling User Input
by almut
in thread Handling User Input
by cheech
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |