0

私は通常、次のようなコードを使用して、ファイルから gnuplot にデータをパイプし、Perl スクリプト中に画像を作成します。

#!/usr/bin/perl
use warnings;
use strict;

my $in="file.dat";

open(GP, "| gnuplot") or die "$!\n";
print GP << "GNU_EOF";

set terminal png size 1920,1080 font 'Verdana,15' dashed
set output 'out.png'
plot "$in"

GNU_EOF

close(GP);

のような変数を使用できるように、"GNU_EOF"代わりに定義する必要があります。'GNU_EOF'$in

今、ファイルから直接読み取られないデータを使用したいと考えています。私のコードは次のようになります:

#!/usr/bin/perl
use warnings;
use strict;

open(GP, "| gnuplot") or die "$!\n";
print GP << 'GNU_EOF';

set terminal png size 1920,1080 font 'Verdana,15' dashed
set output 'out.png'
plot '-'

GNU_EOF

open(INFILE,"< stuff.dat") or die "$!\n";
while (my $line = <INFILE>) {

for my $i (1..10){
    # do some stuff to calculate my data points stored in $x and $y
    print GP "$x $y\n";
}
print GP "EOF\n";
}

close(INFILE);
close(GP);

"GNU_EOF"ヒアドキュメントで変数を定義できるようにこれを使用しようとすると、次のようなエラーが発生します。

gnuplot> 187 0.05
         ^
         line 1: invalid command

知らない

  • ""目的の変数展開を取得するためにヒアドキュメントを使用する必要がある理由と

  • 2 番目の例でエラーが発生する理由。

ヘルプは大歓迎です。

4

1 に答える 1

0

私はそれを解決しました。不完全な質問で申し訳ありませんが、混乱を避けるために最小限の例を挙げたいと思います。残念ながら、私の質問は重要な部分を見逃していました。コメントで述べたように、いくつかのループを使用してデータを生成し、それを gnuplot にパイプします。

#!/usr/bin/perl
use warnings;
use strict;

open(GP, "| gnuplot") or die "$!\n";
print GP << 'GNU_EOF';

set terminal png size 1920,1080 font 'Verdana,15' dashed
set output 'out.png'
plot    '-' t "one", \
        '-' t "two"

GNU_EOF

open(INFILE,"< stuff.dat") or die "$!\n";
while (my $line = <INFILE>) {

for my $i (1..10){
    # do some stuff to calculate data points stored in $x and $y
    print GP "$x $y\n";
}
print GP "EOF\n";
}

for my $i (1..50){
    # do some other stuff to calculate data points stored in $x and $y
    print GP "$x $y\n";
}
print GP "EOF\n";
}

close(INFILE);
close(GP);

理由はわかりませんが、'GNU_EOF'(変数展開なしで)plotラインブレーキコマンドでいくつか定義できます\

を使用し"GNU_EOF"て、1 行で定義する必要があります。

plot '-' t "one", '-' t "two"

苦労して申し訳ありませんが、これは他の人にとっても役立つかもしれません(そして、この動作を私に説明してください)。

于 2013-12-06T15:36:12.597 に答える