BEGINが実行されました UNITCHECKが実行されました CHECKが実行されました INITが実行されました メイン処理が実行されました ENDが実行されました
初期処理、終了処理を定義する方法
スポンサーリンク
Perl では BEGIN, UNITCHECK, CHECK, INIT, END を使用することで、コード読み込み時や終了直前に自動的に実行される内容を定義することができます。
これらが実行されるタイミングは次の通りです。
ルーチン | 実行タイミング |
---|---|
BEGIN | 読み込んだ瞬間に即実行されます。 全体がコンパイルされていなくてもBEGINが読み込まれたら即実行されるため、BEGINより後のコードでコンパイルエラーが発生しても、BEGINの内容は実行されます。 |
UNITCHECK | 定義されたコンパイル単位がコンパイルされた直後に実行されます。 |
CHECK | 最初の Perl コンパイルフェーズ終了直後、実行が開始する直前に実行されます。 |
INIT | Perl ランタイムが実行を開始する直前に実行されます。 |
END | perl がプログラムの実行を終えた後、 インタプリタが終了する直前に実行されます。 |
もっと詳しく知りたい場合はperldocのperlmodのページを参照してください。
実際にコードで試してみると、次のように実行されます。
perl(実行可能なサンプルコード) | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | use strict; BEGIN{ print "BEGINが実行されました\n"; } UNITCHECK{ print "UNITCHECKが実行されました\n"; } CHECK{ print "CHECKが実行されました\n"; } INIT{ print "INITが実行されました\n"; } END{ print "ENDが実行されました\n"; } print "メイン処理が実行されました\n"; |
パッケージの場合
パッケージを use した場合、 import も暗黙で実行されます。 import と BEGIN, UNITCHECK, CHECK, INIT, END の実行順を実際にテストしてみると次のようになります。
test.pl | |
1 2 3 | use strict; use MyModule; |
MyModule.pm | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package MyModule; use strict; BEGIN{ print "BEGINが実行されました\n"; } UNITCHECK{ print "UNITCHECKが実行されました\n"; } CHECK{ print "CHECKが実行されました\n"; } INIT{ print "INITが実行されました\n"; } END{ print "ENDが実行されました\n"; } sub import{ print "importが実行されました\n"; } print "メイン処理が実行されました\n"; 1; |
上記の test.pl を実行した結果は次の通りです。
BEGINが実行されました UNITCHECKが実行されました メイン処理が実行されました importが実行されました CHECKが実行されました INITが実行されました ENDが実行されました
スポンサーリンク