http://qs321.pair.com?node_id=178307


in reply to or operator not working at checking directories

It doesn't work because the match after the or is not happening. You need to be more explict about the second match and use and instead:
if ($homeurl !~ m[^http://] and $homeurl !~ m[^https://]) { print "Your home url has to start with http:// or https://"; }
Or you could put the or inside the match (using | which means 'or'):
if ($homeurl !~ m[^http://|https://]) { print "Your home url has to start with http:// or https://"; }
Or you could use a ? after the s to signify that it may or may not exist, the most elegant method in this case:
if ($homeurl !~ m[^https?://]) { &inerror("Your home url has to start with http:// or https://"); }
To find out the permissions on a file or directory check out stat.

--
Check out my Perlmonks Related Scripts like framechat, reputer, and xNN.

Replies are listed 'Best First'.
Re^2: or operator not working at checking directories
by Aristotle (Chancellor) on Jun 30, 2002 at 10:42 UTC
    if ($homeurl !~ m[^http://|https://]) {

    Careful. Your regex tests for http:// at the start of the string, or https:// anywhere in the string. The |-alternative is greedy if not enclosed in brackets. Also, it is better to keep or distinctions like this outside the regex engine.

    In reply to the original question, I would suggest that it's semantically much better to write this as:
    unless ($homeurl =~ m[^http://] or $homeurl =~ m[^https://]) { &inerror("Your home url has to start with http:// or https://"); }
    which to me feels like it more clearly conveys what's meant here.

    Finally, though, I want to suggest, in this specific instance, to use the ? quantifier:

    unless ($homeurl =~ m[^https?://]) { &inerror("Your home url has to start with http:// or https://"); }
    ____________
    Makeshifts last the longest.