http://qs1969.pair.com?node_id=253059

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

Greetings fellow monks.

I'm having trouble getting this code to work. The code should open a pipe to a program, then send that program multiple files. The problem is that the pipe is closing as soon as the first file is done. I'm assuming that is because I'm sending the EOF from the first file. How do I correct for that?

open ( SCRIPT, "| /usr/local/bin/my_program" ) or die $!; foreach ( </my/file/dir/*> ) { if ( /\.gz$/ ) { open ( FILE, "/usr/bin/zcat $_ |" ) or die $!; } else { open ( FILE, "< $_" ) or die $!; } while ( <FILE> ) { print SCRIPT; } close( FILE ); } close( SCRIPT );

I also tried this slight variant which uses chomp, but no luck:

while ( chomp( my $line = <FILE>) ) { print SCRIPT "$line\n"; }

I am finding that after the first file is sent, the program on the receiving pipe doesn't recieve any more data, but Perl keeps chuging along sending the other files to the pipe. As soon as the receiving program exits, my script dies with a "Broken Pipe" error.