in reply to "or" or "||" problems

First your regex is broken as you have got some / and \ mixed up. Your regex is seen by perl as

m/\d{4}\-\d{2}/ - m/d{2}/

This is unfortunately valid as m// will return a true value if it matches (1) and false (0) if it does not and you can perform integer math on these results. This code should do what you want. You don't need the flag as you can just fail on the first error rather than going through the whole list every time....

for (@list) { next unless $_; unless ( m#\d{4}\-\d{2}\-\d{2}# ) { print "$_ is invalid, the date fields MUST be filled out corre +ctly!"; exit; } }

tachyon

s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

Replies are listed 'Best First'.
Re: Re: "or" or "||" problems
by Silicon Cactus (Scribe) on Nov 07, 2002 at 13:09 UTC
    Thanks so much. The regex was b0rked, yes. :) Although my actual code has it correct. -That's what I get for posting after boiling my brain. <grin>
    I should have thought about the 'next unless $_'. That makes much more sense than what I was doing.
    Also, to avoid the ridicule about my flag being global that is mentioned below, it wasn't. :) I just neglected to post the other declarations in the sub that were outside my loop.

    Anyways, thanks again. :)

      You could get really fancy if you wanted. When validating input via CGI I ususally use $err_msg as a flag. I use it like this:

      ############ VALIDATE USER DATA ############# my $err_msg = ''; # check valid date format $err_msg .= "<p>Wrong date format '$date', use YYYY-MM-DD\n" unless $date =~ m#(\d{4})\-(\d{2})\-(\d{2})#; my $year = $1 || ''; my $month = $2 || ''; my $day = $3 || ''; # check year $err_msg .= "<p>Invalid year '$year'\n" unless $year > 1970 and $year +< 2100; # check month # blah # check day # blah # check other input adding error messages to $err_msg do { show_error_page($err_msg); exit } if $err_msg; ########### ONLY GET HERE IF INPUT VALID ########## do_work()

      I like this because you validate all your input and respond with a comprehensive error message(s). You use $err_msg (which contains elpanatory error text) as the flag, killing two birds with one scalar.

      cheers

      tachyon

      s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print