Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re: bsd_glob does not reset $!

by ikegami (Pope)
on Sep 28, 2006 at 16:23 UTC ( #575382=note: print w/ replies, xml ) Need Help??


in reply to bsd_glob does not reset $!

It's stated very clearly in File::Glob.

If an error occurred, &File::Glob::GLOB_ERROR will be non-zero and $! will be set. &File::Glob::GLOB_ERROR is guaranteed to be zero if no error occurred

perlvar has more to add on $!. (Emphasis in the original.)

This means that the value of $! is meaningful only immediately after a failure. [...] A successful system or library call does not set the variable to zero.

There's even an example in File::Glob's Synopsis. (The example was adjusted to your case.)

@list = bsd_glob($pat, GLOB_ERR); if (GLOB_ERROR) { # an error occurred }


Comment on Re: bsd_glob does not reset $!
Select or Download Code
Re^2: bsd_glob does not reset $!
by stefan k (Curate) on Sep 29, 2006 at 07:44 UTC
    Hi all,
    a few notes on the replies
    • GLOB_ERROR ... Of course I read the perldoc and I tried to use GLOB_ERROR. Unfortunately it is not set to a value other than zero when the globbing produced no result. When I introduce a print Dumper(GLOB_ERROR) after each call to bsd_glob it shows '0' in every case.
    • $! is not reset ... Right, it would be quite counterintuitive if it were reset. That was a stupid assumption of mine. But then, why is it reset with $pat4 in the above example??
    • As to chromatics question: Nah, I may be stupid but it's not that bad ;-) This is not real world code it's just me trying to boil the problem down to some small example. You are right, that I should have swapped the lines dumping the list and dumping $!
    I am still trying to get this working. Any more pointers?

    Following an old rule o' thumb: there must be something very dumb in my thinking or in my code, taking into account the amount of time I have already spent with this problem ;-)

    Regards... stefan k
    you begin bashing the string with a +42 regexp of confusion

      Unfortunately it is not set to a value other than zero when the globbing produced no result

      No matches is not an error. You could check for that condition explicitely.

      if (GLOB_ERROR || !@list) { ... error or no match ... }

      But then, why is it reset with $pat4 in the above example??

      The value of $! is meaningless on success. It could be zero, non-zero, undef, etc.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://575382]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (5)
As of 2015-07-05 06:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls