Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

or operator not working at checking directories

by Anonymous Monk
on Jun 30, 2002 at 04:13 UTC ( [id://178304]=perlquestion: print w/replies, xml ) Need Help??

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

First of all can someone tell me why this doesnt work and give me a working expample :)
### Url has to start with if ($homeurl !~ m[^http:\/\/] or m[^https:\/\/]) { &inerror("Your home url has to start with http:// or https://"); }
... also
well how could I get this to work
if(-d "directory") { }
how could I do something like
if(-d -r -w -x -R -W -X "directory") { }
*hint - im trying to see if the directory is CHMOD to 777

Replies are listed 'Best First'.
Re: or operator not working at checking directories
by epoptai (Curate) on Jun 30, 2002 at 04:27 UTC
    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.

      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.
Re: or operator not working at checking directories
by dws (Chancellor) on Jun 30, 2002 at 04:34 UTC
    how could I do something like

    if(-d -r -w -x -R -W -X "directory") {

    See perlfunc. There's an example of how to do this at the bottom of the section that describes the -X functions. (Hint: pay close attention when you see _ described.)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://178304]
Approved by Marza
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (6)
As of 2024-04-25 10:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found