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

Hello,

when I execute the following code under WinXP, there are strange results:

01 #! /usr/bin/perl 02: use warnings; 03: use strict; 04: 05: my @result = `dir`; # as list 06: die "Error 1: $!\n" if $!; 07: print @result, "\n\n"; 08: 09: my $result = `dir`; 10: die "Error 2: $!\n" if $!; 11: print $result;

Well, the whole code runs fine under 5.8.5 under linux or cygwin/WinXP, but with ActivestatePerl 809 and 810 under WinXP I get an error for the second backtick-command whereas the first runs fine:

Error 2: Bad file descriptor

Is this a bug? or am I the bug?

Best regards,
perl -e "s>>*F>e=>y)\*martinF)stronat)=>print,print v8.8.8.32.11.32"

Replies are listed 'Best First'.
Re: Bug with Backticks under Win32?
by ikegami (Patriarch) on Nov 25, 2004 at 21:05 UTC

    To quote perlvar:

    You shouldn't depend on the value of $! to be anything in particular unless you've gotten a specific error return indicating a system error.

    `` is not a system call (it's an operator), and the documentation of the operator doesn't mention $!. You haven't been told there was an error (much less a system error) before checking $!. Therefore, it's a bug to check $!.

    Other functions (such as open(FILE, '...|')) provide more feedback on errors.

Re: Bug with Backticks under Win32?
by tachyon (Chancellor) on Nov 25, 2004 at 22:09 UTC

    As noted you should not be checking $! as it is meaningless in this context. FWIW on Win2K Perl 5.6.2 it dies on the first call with Error 1: No such file or directory. With the 'error' checks commented out it works as expected and prints the dir listings.</code>

    cheers

    tachyon