Flushing and multiple pipes



Dear group,

happy to post my first message here! So, now the business.

I define two pipes which print both two parsed datastreams on the _same_ postscript file. The data values are selected through 'commands' by certain criteria in the following manner:

# shortened pseudocode
#!/usr/bin/perl

my $pipe1 = " commands >> $psfile";
my $pipe2 = " commands >> $psfile";

open(H1 ,"| $pipe1") or die "\n --- Error: Could not plot $pipe1: $!\n";
open(H2 ,"| $pipe2") or die "\n --- Error: Could not plot $pipe2: $!\n";

foreach my $ifile (@ifiles){
open(IFILE, "<$ifile");
while(<IFILE>){
$line = split(/\s+/,$_);
print H1 $line;
print H2 $line;
}
close(IFILE);
}
close(H1);
close(H2);
# end shortened pseudocode

I noticed that, depending on the datastream type, sometimes the postscript is written and closed correctly, sometimes it does not. I noticed also that on Ubuntu the script behaves differently than on Leopard OSX. No fancy modules are loaded, just pure Perl. The 'commands' are a pipe of awk and gmt routines.

To be on the safe side, i duplicated the foreach loop, and now i open one pipe at a time, guessing that the problem is how the OS flushes the pipes' buffers and how the postscript file gets the values.

It ain't by any means the best solution, because i have to parse the same files twice. Then the question: is there a way to open concurrent pipes in a robust way?

Thanks.

.