Hi all,

I've been banging my head for quite a while on a bad file descriptor problem.  
Basically, I have TAPx::Parser 0.12 
(http://users.easystreet.com/ovid/downloads/TAPx-Parser-0.12.tar.gz) in 
development and I have tried to clean up the 'tprove' script by adding 
TAPx::Parser::Source::Perl.  That package basically tries to execute some perl 
code and return a stream:

  use TAPx::Parser::Source::Perl;
  my $source = TAPx::Parser::Source::Perl->new;
  my $file   = 't/00-load.t';
  my $stream = $source->filename($file)->get_stream;
  while ( defined( my $line = $stream->next ) ) {
      print "$line\n";
  }

It executes the code with the following:

  sub get_stream {
      my ( $self ) = @_;
      my $command = $self->_get_command;

      local *FH;
      # -| is safer, but not portable.
      if ( open FH, "$command |" ) {
          return TAPx::Parser::Iterator->new(\*FH);
      }
      else {
          $self->error("Could not execute ($command): $!");
          return;
      }
  }

However, whenever I try to run it, I get this error message:

  Can't dup STDOUT:  Bad file descriptor at 
/usr/local/lib/perl5/5.8.7/Test/Builder.pm line 1322.

I am autoflushing STDERR and STDOUT in new(), but now I'm stumped.  Any 
suggestions? If you download the tarball, you'll find that examples/tprove has 
the old code and examples/tprove2 has the new code.

Cheers,
Ovid

-- If this message is a response to a question on a mailing list, please send 
follow up questions to the list.
 
Web Programming with Perl -- http://users.easystreet.com/ovid/cgi_course/



Reply via email to