Harry Putnam <[EMAIL PROTECTED]> wrote:
> "Janek Schleicher" <[EMAIL PROTECTED]> writes:
>>
>> The underscore _ holds the results of the last stat call 
>> (implicitly called by the -f operator), so no unnecessary 
>> work needs to be done.
> 
> I've seen that `_' crop up before
> I don't understand what this means.

It's documented in perlfunc:

    $ perldoc -f stat
        [ snip ]

        If stat is passed the special filehandle
        consisting of an underline, no stat is done, but
        the current contents of the stat structure from
        the last stat or filetest are returned.  Example:

            if (-x $file && (($d) = stat(_)) && $d < 0) {
                print "$file is executable NFS file\n";
            }

    $ perldoc -f -X
        [ snip ]

        If any of the file tests (or either the "stat" or
        "lstat" operators) are given the special
        filehandle consisting of a solitary underline,
        then the stat structure of the previous file test
        (or stat operator) is used, saving a system call.

> Further:
> Won't your code try to process symlinks too?

Of course!  Everything resolves symlinks; it's got nothing
to do with the magic "underscore" filehandle.

Try the example code without it:

    if (-e $file and -f $file) { ...

And you'll get the same results.

You need lstat() or -l to find out any information about
the symlink itself.

    -l $file;  # does an lstat() behind the scenes
    -l _;      # just reads values from the buffer

    -e $file;  # calls stat()
    -e _;      # just reads values from the buffer

So... if you're paying attention you can see a problem here.

    if (-e $file and -l _) { ...

But Perl would rather croak() than let you make that mistake
and it results in a fatal error.

-- 
Steve

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to