PDIC-Toolkit Tutorial - Appendix A

PDIC Toolkit Tutorial - Step 3 で例として挙げた verb.pl を、詳しく説明します。

package MY::Filter; use utf8; sub filter { my $entry = shift; if ($entry->{example} =~ /^ρ\./) { return 1; } else { return 0; } } 1; package MY::Filter;

package は「名前空間」を宣言します。プログラム本体とフィルターの間で変数やサブルーチンの名前が衝突しないようにするための仕組みです。PDIC Toolkit のフィルターを書く場合は、名前空間として常に MY::Filter を使用します。

行の最後のセミコロン(";")は「文の終わり」を示す記号です。

use utf8;

文字列を Unicode (UTF-8) として処理するという宣言です。

sub filter { ... }

subサブルーチンの開始を示す宣言です。filter がサブルーチン名です。中括弧のペア({ })で囲まれた内側がサブルーチンの本体です。

my $entry = shift;

極めて重要な1行です。myローカル変数を宣言します。つまり、次の変数 $entry がサブルーチン filter の内部だけで有効であることを示します。

$entry のように "$" で始まる変数は文字列または数値または参照です。Perl では文字列と数値と参照をまとめてスカラーと呼びます。

shift は様々な働きをする関数(function)ですが、ここではサブルーチン filter に与えられた1番目の引数(argument)を返しています。

if ($entry->{example} =~ /^ρ\./) { return 1; } else { return 0; }

Perl の条件文は次のような構文を持ちます。

    if (A) { B } else { C }

A条件式で、条件が満たされた場合はブロック B の文が実行され、満たされなかった場合はブロック C の文が実行されます。

if ($entry->{example} =~ /^ρ\./) {

$entry->{example} という書き方から、変数 $entry連想配列(別名、ハッシュ)への参照であることがわかります。普通の配列が 0 から始まる連続する整数によりインデックスされるのに対し、連想配列は任意の文字列によりインデックスされます。$entry->{example}$entry が参照する連想配列に格納された値のうち、インデックス "example" に対応する値を返します。

一般の人にわかりやすい言い方をすると…変数 $entry はある「辞書項目(entry)」を指している。辞書項目には見出し語、発音、日本語訳などの要素をしまっておく引出しがある。引出しには数字ではなく名前がついている。ある辞書項目の用例は "example" という名前のついた引出しにしまわれている。$entry->{example} と書くとそれを取り出すことができる…こんな感じになるでしょうか。

Step 3 でも説明しましたが =~ は左の文字列と右の正規表現を結びつけてマッチングを行う演算子です。

1;

Perl ライブラリ(他の Perl スクリプトにより読み込まれる Perl スクリプト)は、最後に True 値を返さなければなりません。そこで、ほとんどの Perl ライブラリは最後の行が 1; で終わっています。


黒田努 <tkrd@mail.com> (2002.02.25)