我很快就遇到了从一个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作为第一个命令(用于构造代码)。
答案 0 :(得分:1)
主要问题是缺少文件句柄GP
的关闭。没有关闭,第一个子功能没有引起任何问题(或者更具体:脚本图片应该在后面的脚本中使用,这里不会产生错误),因为第二个子功能由于第二个{{{ 1}} - 陈述。但在第二个子功能中,管道未关闭,因此可能导致错误。
关闭管道时,还需要在open(GP, "| gnuplot")
- 语句处添加分号。我不知道为什么没有print
的脚本没有丢失分号的问题,我也不知道标签缩进是否是一个问题。
尽管如此,这对我有用,也许有人也感兴趣:
close(GP)