Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
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 meditating upon the Monastery: (3)
As of 2024-04-25 07:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found