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

This snippet is from Parsing STDOUT ?
#!C:/perl/bin/perl.exe use warnings; use strict; use RRDTool::OO; use XML::Simple; use Data::Dumper; my $rrd = RRDTool::OO->new( file => "test.rdd" ); $rrd->create( step => 1, data_source => { name => "mydatasource", type => "GAUGE" }, archive => { rows => 5 }); for(1..2) { $rrd->update($_); sleep 1; } my $pid; unless ($pid = open DUMP, "-|") { die "Can't fork: $!" unless defined $pid; $rrd->dump(); exit 0; } waitpid($pid, 0); my $data = join '', <DUMP>; my $ref = XMLin($data); print Dumper($ref);
Does anyone know why I get the following error:
'-' is not recognized as an internal or external command, operable program or batch file. File does not exist: at test.pl line 35
I'm trying this on a windows box and I'm not sure how to redirect STDOUT to accomplish my task. Ultimately I need to capture STDOUT and pass it of to XML-SIMPLE.

jdporter fixed pm link

Replies are listed 'Best First'.
Re: Windows pipe error
by Corion (Patriarch) on Feb 08, 2006 at 15:49 UTC

    perldoc -f open states:

    The last example in each block shows the pipe as "list form", which is not yet supported on all platforms. A good rule of thumb is that if your platform has true "fork()" (in other words, if your platform is UNIX) you can use the list form.

    And while Windows has fork() emulation, that emulation is buggy and doesn't work in many cases. So your approach just won't work.

      Any suggestions for a work around on windows?
        Check this discussion.
        This nice article about forking in perl, might be useful, also.
Re: Windows pipe error
by idle (Friar) on Feb 08, 2006 at 15:37 UTC
    What is your version of perl? v5.005 doesn't support pipes in open, afaik.
    Updated. Sorry, open in v5.005 does support pipes, but not mode "-|".
      5.8.0