=head1 名前 O - Perl コンパイラバックエンドへの汎用インターフェース =head1 概要 perl -MO=[-q,]Backend[,OPTIONS] foo.pl =head1 説明 これは Perl コンパイラへのフロントエンドとして使われる モジュールです. モジュールに対して C<-q> オプションを渡すと, コンパイル中 STDOUT ファイルハンドルが C<$O::BEGIN_output> に対してリダイレクトされます. これによって BEGIN ブロックや use されたモジュールから STDOUT への出力が, 出力される代わりにこの変数に格納されます. これは結果を出力するバックエンド (C, C 等)を使う際に便利です. そしてその出力はコンパイル されているコードから生成される出力と混同しません. C<-qq> オプションは C<-q> と同じように振る舞います. 違いは deparse 終了時に STDERR を閉じることです. これは通常 perl が通常生成する "Syntax OK" メッセージを抑制します. =head1 慣例 多くのコンパイラバックエンドは次のような慣例を持っています: OPTIONS はコンマで区切られた(空白を持たない)単語のリストから成る. C<-v> オプションは大抵バックエンドを verbose モードにする. C<-ofile> オプションは出力を標準出力ではなく B に生成する. 様々な文字が続く C<-D> オプションは内部でバッグフラグを有効にする. 欲しているバックエンドに関するドキュメントも読んでください. (以下ではCとします.) =head1 実装 このセクションではこのモジュールを通して使うことができる コンパイラバックエンドモジュールを書こうとしている人にのみ 必要となります. SYNOPSIS(概要)セクションにかかれているコマンドラインは以下のような Perl コードに対応します. use O ("Backend", OPTIONS); Cと呼ばれる関数で適切なCモジュールをロードし, そのパッケージのC関数を OPTIONS を渡して呼び出します. この関数は CALLBACK と呼ばれる関数リファレンスを返す必要があります. 次に, "コンパイルのみ" フラグ(コマンドラインオプション C<-c> と 等価です)が設定され, CALLBACK を呼び出すCHECKブロックが登録されます. そしてコマンドラインで指定されているメインPerlプログラムが読み込まれ, parse, そして内部構文木形式へとコンパイルされます. C<-c>フラグが 設定されているときは, プログラムは実行を開始されません(もちろん BEGINブロックは除いて)が, コンパイラバックエンドによって登録された CALLBACK 関数は呼び出されます. 要約すると, コンパイラバックエンドモジュールは "B::Foo" として 呼ばれるべきで, その名前に対応するディレクトリに配置します. そして C という関数を定義しなければ成りません. ユーザが次のように入力すると, perl -MO=Foo,OPTIONS foo.pl その関数が呼び出され, OPTIONS (をコンマで切り分けた物)が引数として 渡されます. この関数はメインコンパイル関数となる関数リファレンスを 返さなければなりません. ユーザのプログラムがロード, そしてparseされ ると, 関数が返した関数リファレンスが呼び出され, コンパイルを実行します. コンパイルは大抵 C モジュールの機能を使って行われるでしょう. =head1 バグ perl が PerlIO のサポート付きでコンパイルされていないと C<-q> 及び C<-qq> オプションは正しく動作しません : C<$O::BEGIN_output> にリダイレクトされる代わりに STDOUT が閉じられるでしょう. =head1 著者 Malcolm Beattie, C