[Catalyst] Catalyst and IPC::Open2

Markus "Holli" Holzer holli.holzer at googlemail.com
Sat Aug 4 15:24:09 GMT 2007


Hi.
I'm Holli (known as holli at Perlmonks).
This message is a duplicate of a posting there( 
http://www.perlmonks.org/index.pl?node_id=630220 ).
As nobody seems to be able to help me, I seek the wisdom of this lists' 
users:



Brethren, I have the following Catalyst-Controller


sub test1 : Local
{
    my ( $self, $c ) = @_;
    my $konf = ECS::Inkasso::Konfig->new();
    
    my $bin = $konf->{location}->{bin};
    my $pro = $konf->{location}->{progress};

    print STDERR ">>P start\n";
    my($chld_out, $chld_in);
    open2($chld_out, $chld_in, "perl", "$bin/x2.pl", "$pro/foo.txt");
    print STDERR ">>P end\n";
    
    $c->res->redirect( 
$c->req->base."/forderung/importieren/progress_bar" );
}


As you see the code uses IPC::Open2 to spawn off (should survive the 
creating process) x2.pl:



#x2.pl
for ( 0.. 10 )
{
    open $out, ">$ARGV[0]";
    print $out "$_\n";
    close $out;
    sleep(1);
}



The problem: From the Catalyst output I see the action gets called:


 >>P start
 >>P end
[info] *** Request 1 (0.025/s) [4040] [Thu Aug  2 08:13:30 2007] ***
[debug] "GET" request for "forderung/importieren/test1" from "127.0.0.1"
[debug] Path is "forderung/importieren/test1"
[debug] Redirecting to 
"http://localhost:3000//forderung/importieren/progress_bar"
[info] Request took 0.208057s (4.806/s)
.----------------------------------------------------------------+-----------.
| Action                                                         | 
Time      |
+----------------------------------------------------------------+-----------+
| /begin                                                         | 
0.072754s |
| /auto                                                          | 
0.000065s |
| /forderung/importieren/test1                                   | 
0.000891s |
'----------------------------------------------------------------+-----------'




However, no response gets ever sent to the browser.
If I comment out the open2() line, everything works as expected.
What's happening here? Does open2() something fancy with STDOUT, 
suffering from buffering?


holli, /regexed monk/



More information about the Catalyst mailing list