【モジュールファイル書式】
モジュールファイルは、Perl Script全体の一部分を切り出したものと考えて下さい。即ち、スクリプトの中で、良く使う部分を、切り出して、ファイルに保存しておけば完成です。幾つかのサブルーチン関数(sub)をまとめてモジュールファイルに入れておくのが便利ですが、結果としては、PMFILEに記述された順番にリンクされるだけなので、適当なところでぶった切っても問題はありません。極端な話、サブルーチン関数(sub)の途中で切っても良いです…あまり意味はありませんが…
|
ファイル名の制限
ファイル名に、#を含むものは、#以降が注釈と見なされるので避ける様にしてください。(ターゲットファイル名も同様)
ターゲットファイル名と同じファイル名のものがあると、上書きされてしまう恐れがあるので、拡張子を変える等して区別する事を推奨します。拡張子については、PLB(Perl LiB file)を推奨しますが、制限は無いので、PL,CGI等でも何ら問題はありません。
|
制御コマンド
モジュールファイル内に、#'から始まる行が存在する場合、PERLMAKEは、これを制御コマンドとして扱い、ターゲットファイルには出力しません。制御コマンドとしては、以下の制御コマンドを記述する事が出来ますが、記述出来る場所に制限が有りますので、以下「制御ヘッダ」「制御行」の項目を参照して下さい。
以下、コマンド中の青色部分は、任意の文字列と解釈してください。
- #'〜
ターゲットファイルに出力しません。以下の何れかの制御コマンドに合致しない場合でも、#'から始まる行は、ターゲットファイルには出力されません。どうしても必要な場合は、先頭にスペースを挿入する等して下さい。
- #'nopath
モジュールファイルの1行目を出力しません。モジュール毎にデバッグを行って、先頭に『Perlへのパス』が記述されている場合等に指定して下さい。
- #'nocom
PERL MAKEは、モジュールファイルをリンクした後,リンクしたモジュールファイル名を、コメントとしてターゲットファイルに出力しますが、この制御行がある場合は、このコメント出力を(該当ファイルについてのみ限定で)行いません。ターゲットファイルのサイズを少しでも節約したい場合,勝手に付加されるコメントがうざい!という場合に指定して下さい。
- #'need test.plb(モジュールファイル名)
そのモジュールファイルをリンクする前に、リンクしておきたいモジュールファイルを記述します。このコマンドが有る場合、PERL MAKEは、現モジュールファイルのリンクを一旦保留し、指定されたモジュールファイルを先にリンクします。現在のモジュールファイルは、その後にリンクされます。別のモジュールファイルの変数を参照しているとか、他のモジュールにあるサブルーチンを呼んでいるという場合に指定しておくと便利です。有る意味では、C/C++の#includeに似ています。勿論,既にリンクされている場合はリンクしません。基本的には、順序よくPMFILEに記述すれば良いのですが、書き忘れや順序のミスを修正する等の効果が期待出来ます。
※モジュールファイル名には、linkコマンド同様にラベル名を含める事が出来ます。
- #'head{
〜制御ヘッダ(拡張)〜
#'}head または、 #'headend
(V1.4.1.以降で追加)制御ヘッダ部を記述している事を明示します。モジュールファイルの先頭5行目以内に、#'head{が存在する場合は、行頭から、#'}headが見つかるまでを、拡張制御ヘッダとして扱います。拡張制御ヘッダは、最大で、モジュールファイル先頭から32行とします。(従来版との互換性を保つ為、若干ややこしい仕様となっていますが、要は、モジュールファイルの5行目までに、#'head{があれば、拡張ヘッダとして認識され、もう少し、制御ヘッダに多くの情報を含める事が出来るという事です,多分、32行以上使う事は無いでしょうという勝手な解釈で、最大行数を32としています)
#'}headと、#'headendは、同一の意味を持ちます。これらが、#'head{を伴わず、単独で使用された場合、それ以降の行をヘッダとして扱いませんので、ヘッダを、5行より短くする事も出来ます。
- #'(ラベル名){
〜ラベル名に相当するコード
#'}(ラベル名)
ラベル処理:この2つのコマンドに囲まれた部分を、ラベル名の名前で定義付けます。モジュールファイル内の1部分だけを、ターゲットファイルに出力したい場合、この「ラベル名」にて指定する事が出来ます。モジュールファイルの指定で、ラベル名を指定されていない場合は、このコマンドは無視されます。
※ラベル名には、アルファベット,数字を使用して下さい。記号が含まれた場合の動作は保証されていません。
※ラベル名がdebugの場合、下記の除外処理となります。また、ラベル名がheadの場合、上記の制御ヘッダラベルと混同する為、ラベルとしては認識されません。このため、リンクさせるラベル名として、debug,headを指定する事は出来ません。(V1.4.1.修正)
※除外処理より優先されるので、除外処理中に記述されていた場合でも、ラベルが一致した場合は採用されます。
※指定したモジュールファイル内に、複数の同名ラベルが定義されている場合は、それら全てを出力します。
※ラベルの範囲が重なっていたり、ラベルの範囲と除外の範囲が重なった場合の処理については、保証しませんが、計画通りであれば、この表の通りの動作をします。
※ラベル名を指定されていて、指定されたラベル名が見つからない場合は、全てがターゲットファイルに出力されません。
※ラベル処理の終了コマンドが省略された場合は、ファイルの終わりまでをラベルと認識します。
| | | | | | | | | | | | | |
- #'debug{
〜デバッグ用のコード
#'}debug
除外処理:この2つのコマンドに挟まれた部分について、ターゲットファイルに出力しません。C/C++言語で、よく使われる、
#define _DEBUG_
〜
#ifdef _DEBUG_
〜デバッグ用のコード
#endif
|
の代用と考えて下さい。モジュール単位でのデバッグを行った場合等、最終的には不要となる部分は、この記述で挟んでおけば、ターゲットファイルには反映されない訳です。尚、この間は、制御コマンドについても無視されます。尚、#'}debugが省略された場合は、ファイルの終わりまでが、除外の対象となります。
- #'<=test2.plb(サブモジュールファイル名)
C/C++の#includeの様に、指定箇所に、サブモジュールファイルを単純に展開します。サブモジュールファイルは、実質的に、モジュールファイルですが、この制御コマンドにて取り込んだ場合には、内部の制御コマンドは実行されずに、単純に展開されます。また、重複チェックは行われない為、2重に読み込まれる可能性もあります。これについては、使用者の方で気を付けて下さい。
|
制御ヘッダ
モジュールファイルの先頭の5行目(拡張で最大32行)までを、制御ヘッダと呼びます。この部分には、以下の制御コマンドを記述する事が出来ます。
- #'〜
- #'nopath
- #'nocom
- #'need test.plb(モジュールファイル名)
- #'head{
〜制御ヘッダ(拡張)〜
#'}head または、 #'headend
|
制御行
上記、制御ヘッダ以外の部分に記述した制御コマンドを制御行と呼びます。使用出来る制御コマンドは、以下の通りです。
- #'〜
- #'(ラベル名){
〜ラベル名に相当するコード
#'}(ラベル名)
- #'debug{
〜デバッグ用のコード
#'}debug
- #'<=test2.plb(サブモジュールファイル名)
|
【その他:注意事項/改版予定等】
注意事項
PMFILE中に無効なコマンドが記述されている場合、その行は無視されますが、無効コマンドが連続する場合には、PERL MAKEが異常終了する可能性が有りますので、なるべく有効コマンドのみで記述して下さい。(将来の版で修正します)(1.1.1.対応)
- PMFILEのlink=..にてリンクされるファイルと、制御コマンドの#'needでリンクされるファイルの数は、合計で128個までが限界です。これを越えた場合の動作保証はしません。#'needにて要求されたファイル内で、更に#'needが有る場合も、全てリンクの対象となるので、注意が必要です。
- 上述の、#'needにて要求されたファイル内で、更に#'needが有る場合は許容されますが、このネストの深さも、128までが限界です。こちらも保証はしませんので、注意が必要です。
- 127バイト以上のファイル(モジュールファイル,ターゲットファイル等)名,モジュールファイル内に、1行が、127バイト以上の行が存在する場合,その他、127バイト以上の文字列が存在する場合、動作については保証出来ません。多少の余裕を考慮している部分もありますが、一般的には、存在しない状況と考えて仕様として保証はしませんので、注意して下さい。
|
免責事項
- 本ツールの使用にあたっては、以下の免責事項を全て承諾していただいた上で、使用されるものとします。
- 本ツールを使用した上で発生した、如何なる問題,障害に関しても、当方は責任を負いかねます。
- 本ツールは、フリーソフトですが、著作権については放棄しておりません。本ツールを、サイト等にて再配布される場合は、COOL(http://homepage2.nifty.com/ozzaki/)へのリンクを貼るか、若しくは、当方サイトのURL:http://homepage2.nifty.com/ozzaki/の表記を行う義務があるものとします。
|
改版履歴
0.9.5. | デバッグ開始版(β) | 未配布
| 1.0.0. | 内部配布開始 | 一部テスタ殿配布
| 1.0.5. | 重複チェックで、抜けがあった点,修正 | テスタ殿指摘
| 1.1.1. | PMFILEの無効コマンド無視対応(ローカル) | --
| 1.2.0. | #'<=...コマンド対応 | テスタ殿要望
| 1.3.0. | 単独モード実装 | --
| 1.3.2. | 単独モードバグ修正 | 配布版1
| 1.3.5. | 部分リンク実装 | ローカルテスト版
| 1.4.0. | リンクマップ作成機能実装 | ローカルテスト版
| 1.4.1. | 拡張制御ヘッダ対応 | ローカルテスト版
| 1.5.0. | 1.4.1.同等 | 配布版2
|
|
改版予定
#'<=...コマンド対応(1.2.0.対応)
PMFILEの無効コマンド無視対応(1.1.1.対応)
単独モードの実装
PM /c target.cgi exam.plb
にて実行し、架空のPMFILE
target=target.cgi
link=exam.plb
を作成して実行するモード。CC test.cppの様な環境を実現する事が目的
仕様未確定の為、未実装(1.3.0.対応)
部分リンク(ラベル指定)の実装(1.3.5.対応)
制御ヘッダの行数が5行より多い若しくは少ない場合の対応
(1.4.1.対応)
リンクマップ作成機能の追加(1.4.0.対応)
|