Paul Johnson wrote: > > On Fri, Jan 16, 2004 at 11:47:59AM -0800, John W. Krahn wrote: > > Paul Johnson wrote: > > > > > > chad kellerman said: > > > > > > > > I am starting to work on a script that is going to process a few > > > > files in some users directories. I thought I would do some checking on > > > > the file to make sure they are there and to make sure they are really > > > > files. I thought it was going to be pretty straight forward, until I > > > > ran it for the first time. Sometimes the script sees the file for one > > > > user but not the next ( that I know is there)? > > > > I must be misunderstanding something small, but I can't figure it > > > > out. > > > > Can anyone offer any suggestions? > > > > > > You are using glob in a scalar context. This is not what you want. > > > > > > perldoc -f glob > > > > Interestingly enough it works on my system. Scalar and list context > > both return the first file name from the glob. > > Right, the first time round the loop. But the behaviour is different > the next time, as chad originally reported.
Yes. This is documented in perlop.pod. perldoc perlop [snip] 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. In list context, this isn't important because you automatically get them all anyway. However, in scalar context the operator returns the next value each time it's called, or C run out. As with filehandle reads, an automatic `defined' is generated when the glob occurs in the test part of a `while', because legal glob returns (e.g. a file called 0) would otherwise terminate the loop. Again, `undef' is returned only once. So if you're expecting a single value from a glob, it is much better to say ($file) = <blurch*>; than $file = <blurch*>; because the latter will alternate between returning a filename and returning false. John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>