Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re: glob behavior

by davido (Archbishop)
on Mar 20, 2012 at 08:14 UTC ( #960546=note: print w/replies, xml ) Need Help??

in reply to glob behavior

In scalar context (your second example), glob will iterate over the items that match -- one item per call, and return undef if no more items remain. In list context (your first example), glob will return the entire list of items that matched, and that list could possibly be empty.

So your two examples do differ in the context in which glob is being called, and that is documented to provide different behavior. Essentially, in scalar context glob acts like an iterator. In list context it doesn't iterate; it just returns a list.

What I can't explain is why the list would be empty if nothing else changed.


Replies are listed 'Best First'.
Re^2: glob behavior
by rovf (Priest) on Mar 20, 2012 at 08:34 UTC
    What I can't explain is why the list would be empty if nothing else changed.
    From perlop:

    A (file)glob evaluates its (embedded) argument only when it is starting a new list. All values must be read before it will start over. I think this explains the effect we can see: The first time in the loop, the arguments for glob are evaluated and return one file name. The second time in the loop, the arguments are not evaluated again (since the list is not "exhausted" yet). Instead, glob tries to find the next file, but there is none, and returns undef to signal this fact. On the third iteration, the arguments are evaluated again, yielding one filename.

    Ronald Fischer <>
      It seems to be the case since after I added
      U:/TEMP/TEMP/D/Test04.txt U:/TEMP/TEMP/E/Test05.txt
      it prints in the first version:
      A : U:/TEMP/TEMP/A : U:/TEMP/TEMP/A/Test01.txt D : U:/TEMP/TEMP/D : U:/TEMP/TEMP/D/Test04.txt C : U:/TEMP/TEMP/C : U:/TEMP/TEMP/C/Test03.txt E : U:/TEMP/TEMP/E : U:/TEMP/TEMP/E/Test05.txt B : U:/TEMP/TEMP/B : U:/TEMP/TEMP/B/Test02.txt
      and in the second version:
      A : U:/TEMP/TEMP/A : U:/TEMP/TEMP/A/Test01.txt, Use of uninitialized value $file in concatenation (.) or string at ... + line 17. D : U:/TEMP/TEMP/D : , C : U:/TEMP/TEMP/C : U:/TEMP/TEMP/C/Test03.txt, Use of uninitialized value $file in concatenation (.) or string at ... + line 17. E : U:/TEMP/TEMP/E : , B : U:/TEMP/TEMP/B : U:/TEMP/TEMP/B/Test02.txt,
      Thank you very much!
      What I do not understand though - to be honest - is why glob is not evaluated again on the second loop pass.
      Update: After reading perlop and your post twice I did catch it :-)
      Sometimes it takes longer to savvy.
      Thanks again!
Re^2: glob behavior
by vagabonding electron (Chaplain) on Mar 20, 2012 at 09:34 UTC

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://960546]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (7)
As of 2018-05-27 22:20 GMT
Find Nodes?
    Voting Booth?