Go to the first, previous, next, last section, table of contents.


実行とオプション

実行にあたって、Perl は指定されたスクリプトを以下に示す場所で探します:

  1. コマンドライン上で `-e' スイッチで指定された行。
  2. コマンドライン上で最初のファイル名として示されたファイルの中。(#! 記法を サポートしているシステムでは、このようにしてインタプリタを呼び出します。)
  3. 標準入力から非明示に渡される。ファイル名を示す引数が無い場合にのみうまく いきます。STDIN からのスクリプトに引数を渡すには、スクリプト名として明示 的に "-" を指定しなくてはなりません、

2 番目、3 番目の方法では、`-x' スイッチを指定した場合を除いて、Perl は入力ファイルを最初から解析し始めます。`-x' スイッチを指定した場合 には、まず、最初に #! と "perl" という文字列を含む行を探し、そこから解析 を始めます。これは、大きなテキストにスクリプトを埋め込んで、実行するよう なときに便利です。(この場合、スクリプトの終わりは、トークン __END__ を使って示すとよいでしょう。)

Perl 5 からは、#! を含む行のスイッチが必ず解析されるようになりました。つ まり、#! の行で引数が一つしか許されない、あるいはもっと悪く、#! の行が認 識されないといったシステムで運用している場合にも、`-x' でスクリプト の開始位置を見つけた場合を含め、どのように Perl が起動されたかによらず、 一貫したスイッチの動作を期待できるようになっています。

多くの OS で、カーネルによる #! 行の解釈が、エラーなしに 32文字で打ち切 られてしまいますので、あるスイッチはコマンドラインに渡され、あるスイッチ は渡されないといったことが起こります。注意しないと、文字が続かない "-" だけが渡されるといったことも起こり得ます。すべてのスイッチが、32 文字境 界の前か後ろかを確かめたいことでしょう。多くのスイッチは、余分に処理され ても問題ありませんが、完全なスイッチの代わりに - が入っていた場合には、 スクリプトの代わりに、標準入力を Perl に実行させることになってしまいます。 `-I' スイッチが中途半端になった場合にもおかしな結果となり得ます。

#! スイッチの解析は、行内で "perl" が示された位置から始まります。とりわ け "-*" と "- " という文字の並びは無視されますので、

#!/bin/sh -- # -*- perl -*- -p
eval 'exec perl $0 -S ${1+"$@"}'
    if 0;

のように書けば、Perl に `-p' スイッチを渡すことができます。

#! 行に "perl" という語が含まれていなければ、#! の後に指定されたプログラ ムが Perl インタプリタの代わりに実行されます。これは少し変わっていますが、 #! が行なえないマシンを使っている方には有効でしょう。プログラムに対して 使っている SHELL が /usr/bin/perl だと言っておけば、Perl が正しいインタ プリタを起動してくれるからです。

スクリプトの場所が特定できたなら、Perl はスクリプト全体を内部形式にコン パイルし始めます。コンパイルエラーが見つかった時には、スクリプトの実行は 行なわれません。(これは、構文エラーがある場合にも、途中まで実行される可 能性のある、典型的なシェルのスクリプトと異なる点です。)

スクリプトが構文的に正しければ、実行されることになります。スクリプトが、 exit() 演算子にも die() 演算子にも当たらないで最後まで到達すると、正常に 完了したことを示すために、暗黙の exit(0) が行なわれます。

1 文字のスイッチは、次に続くスイッチがあれば、それとつなげることができま す。

#!/usr/bin/perl -spi.bak    # -s -p -i.bak と同じ


Go to the first, previous, next, last section, table of contents.

検索式: