コマンドラインで指定されたファイルを印刷する

  topaz pr graph.tpz
の様に、コマンドラインで指定されたファイル"graph.tpz"を印刷し、印刷終了後コマンドラインに戻るスクリプト"pr"を考えてみましょう。ただし、lprにはPostscriptプリンタが関連付けられているとします。


  1:  $graph->gropen($ARGV[0]);
  2:  open (F, '| tpv2ps | lpr');
  3:  $graph->paintall(F);
  4:  close(F);

 
 1行目で、スクリプトprの第1引数で指定されたグラフをオープンします。2行目で、プリンタへのパイプをオープンし、ファイルハンドル"F"に結び付けます。Topazの出力はtpv形式なので、Postscriptへのフィルタ"tpv2ps"を介して、プリンタlprに送り込むわけです。3行目でグラフイメージ全体をファイルハンドル"F"に転送します。4行目でファイルハンドルをクローズします。

 次に以下のように、複数ファイルを印刷できるよう改良してみましょう。

  topaz pr graph1.tpz graph2.tpz graph3.tpz
以下がそのスクリプトです。
  1: $len = @ARGV;
  2: for ($i = 0; $i < $len; $i++)
  3: {
  4:    $graph->gropen($ARGV[$i]);
  5:    open (F, '| tpv2ps | lpr');
  6:    $graph->paintall(F);
  7:    close(F);
  8: }
 第1行目で引数の数をスカラー変数$lenに代入しています。Perlと同様、配列変数をスカラー変数に代入すると、配列の数をスカラー変数に渡すことを思い出しましょう。2行目以降では、forループで各ファイルに対して印刷処理を行っています。また、このスクリプトはforeach文を用いて、さらに洗練された形で記述できます。
  1: foreach $i (@ARGV)
  2: {
  3:    $graph->gropen($i);
  4:    open (F, '| tpv2ps | lpr');
  5:    $graph->paintall(F);
  6:    close(F);
  7: }
 このようにスクリプトを用いると、連続印刷のような複雑な処理でも、とてもスマートに実現できることがお分かりいただけたと思います。