Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: bsd_glob does not reset $!

by ikegami (Patriarch)
on Sep 28, 2006 at 16:23 UTC ( [id://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 }

Replies are listed 'Best First'.
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
Domain Nodelet?
Node Status?
node history
Node Type: note [id://575382]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (3)
As of 2024-04-24 03:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found