Perlスクリプトの実行
ステートメント
コメント
シンボル名
ブロック
サブルーチン
サブルーチンのライブラリ化
perlスクリプトの書かれたファイルを実行するには、perl(Perlの実行プログラム)の引数としてスクリプトファイル名を与えます。
perl perlScriptFile
たとえばPerlスクリプトの書かれたprint.plを実行するには、以下を実行します。
perl print.pl
UNIX系の環境なら、スクリプトファイルの先頭で、以下のようにインタプリタを指定することで、スクリプトファイルを(シェルスクリプトの場合と同じように)シェルから直接起動することもできます。
#!/bin/perl
たとえば、print.plの先頭に、インタプリタ指定行を追加した場合、以下のようにシェルからスクリプトファイルを直接指定して実行することができます。
$ print.pl
Perlはプログラムの実行の前にプログラム全体を読み込んで内部コードに展開(コンパイル)してからプログラムの実行を開始します。
Perlではステートメント(文)の最後に、必ずセミコロン「;」を付ける必要があります。
プログラム行中の"#"から改行まではコメントとみなされます。ただし以下の場合は例外で、コメントとはみなされません。
- 文字列の中に出現した場合
- 変数を示す"$"の直後
- 文字列の区切りに用いられる場合
Perlプログラムで使用する変数名、関数名などには英数字とアンダースコア'_'を 使用することができます。
名前の大文字と小文字は区別されます。
複数のステートメントを中括弧で囲んだものを「ブロック」といい、一つのステートメントのように扱うことができます。ブロックはifやforなどの制御構造、およびサブルーチンの実装でも使用されるます。ブロック内ではlocal演算子を使ってローカル変数を使用することができます。
do演算子を使ってブロックをひとつの式として扱うことができます。このときの式の値はブロックの最後の式の値となります。
Perlのサブルーチン(ユーザー定義関数)は、以下の構文で定義されます。
sub sub-routine_name block
サブルーチンは名前の前に &またはdo演算子を付けることにより式として呼び出します。以下はサブルーチンとサブルーチン呼び出しの例です。
sub usage {
print STDERR "USAGE:...";
}
&usage; # サブルーチンusageの呼び出し
do usage(); # サブルーチンusageの呼び出し(上の記述と等価)
サブルーチンはプログラム内のどこに置いてもい構いません。サブルーチン中に別のサブルーチンの定義があっても良いし、evalを使って実行時にサブルーチンの定義を行うこともできます。サブルーチンの返り値は、通常ブロック中の最後の式の値ですが、returnによって返り値を指定することもできます。サブルーチンの引数は引数リストを括弧で括って指定します。リストの要素が配列の場合、各要素を引数として順に並べたものと同じ意味になります。各引数は、@_という配列に参照渡しされます。値渡しにしたい場合は、localで宣言した局所変数にコピーと言う方法で対処します。サブルーチンを値渡しとすることで、再帰呼び出しも実現することができます。
@array = ( 1, 2 );
do test1( @array ); # @arrayはサブルーチン内で書き換えられ ( 0, 2 )に変化
do test2( @array ); # @arrayは変化しない
sub test1
# 引数の参照渡し
{
@_[ 0 ] = 0; # 第1引数(つまり@arrayの最初の要素)に0を代入
}
sub test2
# 引数の値渡し
{
local( $a ) = @_;
$a = 20;
...
}
shift演算子はデフォルトでサブルーチンへの引数の格納された配列@_を使用します。shift演算子を使うと、次のように引数を1つずつ処理することができます。
sub func
{
local( $argwrk );
# shiftは引数の格納されている@_を参照する
$argwrk = shift; print "$argwrk\n"; # 第1引数のprint
$argwrk = shift; print "$argwrk\n"; # 第2引数のprint
}
配列や連想配列をサブルーチンに渡して計算を行いたい場合は参照表現を使います。参照とは変数や配列、ファイルハンドルを表現するポインタのようなもので、名前の先頭にアスタリスク(*)を付けて表記します。参照を別の参照に代入すると、別の名前でもとのデータを操作することができます。
サブルーチンが呼び出された環境はcaller演算子で知ることができます。caller演算子はサブルーチンを呼び出したパッケージ名、ファイル名、行番号を配列として返します。
Perlのサブルーチンは再利用可能なライブラリとすることができます。ライブラリとするルーチンを含むファイルの拡張子は.plとします。
ライブラリを必要とするPerlプログラムはrequire文を実行してライブラリをロードします。
require はライブラリファイルが見つかって実行できたときに成功します。requireを成功させるために、ライブラリを定義したファイルの最後(サブルーチンの外)に以下のようにゼロ以外の値を返す記述が必要です。
1;
以下はライブラリの定義例です。
#!/usr/bin/perl
# usrlib.pl
sub ulib
{
print "ulib()\n";
}
1;
このライブラリにあるサブルーチンulibを使うには、以下のようにrequireを使ってライブラリをロードします(ライブラリがカレントディレクトリにbooks_tbl.plの名前で保存されていることを想定しています)。
require 'books_tbl.pl';
後は通常と同じようにサブルーチンをコールします。
do lib();