从Perl到Gnuplot的heredoc管道

时间:2013-08-07 15:06:50

标签: perl pipe gnuplot

我很快就遇到了从一个Perl脚本传递到Gnuplot本身的Gnuplot命令墙的问题。我的主要开始参考是perlmonks。然后子功能看起来像:

sub binPics {

my $inFileName = shift;
my $outFileName = shift;
my $outputFormatPics = shift;

open(GP, "| gnuplot") or die "Error while piping to Gnuplot: $! \n";
    print GP << "   GNU_EOF"

    plot "$inFileName" u 2 lw 2.5 lc 1 , "" u 3 lw 2.5 lc 2
    set terminal $outputFormatPics
    set output '$outFileName.$outputFormatPics'
    replot

    GNU_EOF
}

在此之后,使用类似的语法但不同的Gnuplot命令定义第二个子功能。我按照我定义的顺序调用这些子功能。稍后在脚本中生成的图片被进一步使用。这会产生错误。

那么这里的问题是什么?可能的运行脚本会是什么样子?

我将为此问题提供我的固定脚本,但无法解释整个heredoc语法。请随意这样做或提出其他建议。

/编辑

在SO样式中不再显示缩进。 heredoc中的行将tabs作为第一个命令(用于构造代码)。

1 个答案:

答案 0 :(得分:1)

主要问题是缺少文件句柄GP的关闭。没有关闭,第一个子功能没有引起任何问题(或者更具体:脚本图片应该在后面的脚本中使用,这里不会产生错误),因为第二个子功能由于第二个{{{ 1}} - 陈述。但在第二个子功能中,管道未关闭,因此可能导致错误。

关闭管道时,还需要在open(GP, "| gnuplot") - 语句处添加分号。我不知道为什么没有print的脚本没有丢失分号的问题,我也不知道标签缩进是否是一个问题。

尽管如此,这对我有用,也许有人也感兴趣:

close(GP)