У меня есть следующая функция для построения данных с использованием perl + gnuplot. Файлы входных данных довольно многочисленны, и около половины из них создают недопустимые диапазоны, и я хочу обнаружить и удалить эти плохие файлы. Функция обрабатывает только один файл, и я не мог заставить его читать какой-либо вывод gnuplot, он просто блокирует. Я пробовал читать GPR/GPE напрасно.Perl open3 чтение ручек трубы блока gnuplot
sub plot_file {
my $filename = shift;
if ($filename =~ m![^\/]+/([^.]+)\.([^.]+)\.([^.]+)!) {
my ($node, $box, $metric) = ($1, $2, $3);
my $plot_file = "plots/$node.$box.$metric.eps";
if ($metric !~ /Sqr/) {
open3(\*GPW, \*GPR, \*GPE, "$gnuplot") or die "no gnuplot";
print GPW "set terminal postscript 'Consola' 12\n";
print GPW "NODE = '$node'\n";
print GPW "BOX = '$box'\n";
print GPW "METRIC = '$metric'\n";
print GPW "DATA_FILE = '$filename'\n";
print GPW "OUT_FILE = '$plot_file'\n";
print GPW "set size 1.0,0.5\n";
print GPW "set title BOX.' - '.NODE.' - '.METRIC\n";
print GPW "set output OUT_FILE\n";
print GPW "plot DATA_FILE using 1:2 with lines notitle\n";
my $skip;
while (<GPE>) {
if (/Warning/) {
system ("rm $plot_file");
$skip = 1;
last;
}
}
if (not $skip) {
system ("epstopdf $plot_file");
}
}
}
}