do BLOCK
は、BLOCK
で指示されるコマンド群の
最後のコマンドの値が返る。ループ修飾子で修飾された場合は、
ループ条件をテストする前に一回実行される。
(他の文ではループ修飾子は条件テストを最初に行う。)
do SUBROUTINE
は、
sub
で宣言された SUBROUTINE
を実行し、
SUBROUTINE
で評価された最後の expression の値を返す。
その名前のサブルーチンがない場合は、致命的エラーとなる
(サブルーチンが存在するかどうか知るには、
defined
演算子を使用すれば良い。)。
LIST
の一部として配列を渡す場合、
各配列の前に配列の長さを渡してもいいだろう。
(後で出てくる subroutines
の章を参照。See section サブルーチン.)
`do EXPR' との混乱を防ぐため、括弧は必要である。
SUBROUTINE
は一スカラー変数であってもよい。
この場合実行すべきサブルーチンの名前はその変数から取り出される。
別の書き方として(そして望ましい書き方として)、
名前の前に &
をつけてサブルーチンをコールしても良い。
例: &foo(@args)
引数を渡さないのであれば、括弧を使う必要はない。
括弧を省略した場合、サブルーチンには配列 @_
は渡されない。
&
形式は defined
および undef
に
サブルーチンを指示するのにも使える。
if (defined &$var) { &$var($parm); undef &$var; }
do EXPR
は、EXPR
をファイル名として、
そのファイルの内容を perl スクリプトとして実行する。
その主たる使用法は、
perl サブルーチンライブラリからサブルーチンをインクルードすることである。
do 'stat.pl';は、
eval `cat stat.pl`;と全く同じである。 (より効率的で、より簡潔で、エラーメッセージでのファイル名は正しく、 カレントディレクトリになければ
-I
で指定されたライブラリを
全て検索する点が異なる。See section @INC : perl スクリプトを探す場所のリスト for @INC
.)
しかし、コールする毎に parse し直すのは同じなので、
ループの中で使用する際には -P
オプション
および #include
を使った方がよい(若干立ち上げ時間が増えるが)。
#include
の問題点は、cpp
は #
がコメントであることを
わかってくれないことである -- コメントだけからなる行には `;#' を
使うことになる。
注意:do $foo; # ファイルを評価する do $foo(); # サブルーチンを呼ぶライブラリルーチンをインクルードするには `require' オペレータがよい。 See section require.