Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

"The stat preceding -l _ wasn't an lstat"?

by Burak (Chaplain)
on Jan 14, 2010 at 23:26 UTC ( [id://817502]=perlquestion: print w/replies, xml ) Need Help??

Burak has asked for the wisdom of the Perl Monks concerning the following question:

This code:
-X $file && -l _
seems to die randomly on some systems (-X can be one of -e, -f, etc.) While I've located the perl core patches to this error, it seems inconsistent. Is there a perl compilation option to activate this thing? since I while I don't see that in my systems, I did get it from dreamhost which has 5.8.8:
burak@ubuntu:~$ perl -wle 'print qq{plain!\n} if -f q{sysinfo.pl} && ! + -l _; print qq{FooBar\n}' FooBar burak@ubuntu:~$ perl -v This is perl, v5.10.0 built for i486-linux-gnu-thread-multi Copyright 1987-2007, Larry Wall Perl may be copied only under the terms of either the Artistic License + or the GNU General Public License, which may be found in the Perl 5 source ki +t. Complete documentation for Perl, including FAQ lists, should be found +on this system using "man perl" or "perldoc perl". If you have access to + the Internet, point your browser at http://www.perl.org/, the Perl Home Pa +ge. [schultz]$ perl -wle 'print qq{plain!\n} if -f q{sysinfo.pl} && ! -l _ +; print qq{FooBar\n}' The stat preceding -l _ wasn't an lstat at -e line 1. [schultz]$ perl -v This is perl, v5.8.8 built for x86_64-linux-gnu-thread-multi Copyright 1987-2006, Larry Wall Perl may be copied only under the terms of either the Artistic License + or the GNU General Public License, which may be found in the Perl 5 source ki +t. Complete documentation for Perl, including FAQ lists, should be found +on this system using "man perl" or "perldoc perl". If you have access to + the Internet, point your browser at http://www.perl.org/, the Perl Home Pa +ge. C:\Users\burak>perl -wle "print qq{plain!\n} if -f q{sysinfo.pl} && ! +-l _; print qq{FooBar\n}" FooBar C:\Users\burak>perl -v This is perl, v5.10.1 built for MSWin32-x86-multi-thread (with 2 registered patches, see perl -V for more detail) Copyright 1987-2009, Larry Wall Binary build 1006 [291086] provided by ActiveState http://www.ActiveSt +ate.com Built Aug 24 2009 13:48:26 Perl may be copied only under the terms of either the Artistic License + or the GNU General Public License, which may be found in the Perl 5 source ki +t. Complete documentation for Perl, including FAQ lists, should be found +on this system using "man perl" or "perldoc perl". If you have access to + the Internet, point your browser at http://www.perl.org/, the Perl Home Pa +ge.
However, I also got this fail (5.10.1): http://www.cpantesters.org/cpan/report/6660359 This error is inconsistent and seems to be undocumented anywhere. I'll possibly change the code but do you have any ideas regarding this?

Thanks,
Burak

Replies are listed 'Best First'.
Re: "The stat preceding -l _ wasn't an lstat"?
by ikegami (Patriarch) on Jan 15, 2010 at 01:54 UTC

    The patch is quite old (Nov 2000)

    The message is not currently (and probably never was) in any conditionally compiled code.

    The check is definitely present in 5.10.0

    This error is inconsistent and seems to be undocumented anywhere.

    It's right there in perldiag along with all the other warnings, and has been there just as long

Re: "The stat preceding -l _ wasn't an lstat"?
by Tanktalus (Canon) on Jan 15, 2010 at 23:51 UTC

    Maybe it depends on whether the last stat was successful or not? That is, if sysinfo.pl doesn't exist, your code gives me no problems, printing FooBar. But, on the same machine, if I then touch sysinfo.pl, I get the error message you complain about. Perhaps perl can't tell the difference between an unsuccessful stat and an unsuccessful lstat, when using "-l _" because it's just not stored?

      You're right I guess. Btw, I'm doing -f $file && ! -l $file (double call) now to prevent this error.

        Just reverse it, and it's ok. ! -l $file && -f _. The -f flag can work on lstat's output, whether the lstat found a link or not.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://817502]
Approved by zwon
Front-paged by Tanktalus
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (6)
As of 2024-04-19 07:51 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found