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>


Reply via email to