[Glue!] 標準コマンドライン・オプションの取得


Glue Logic では幾つかの標準的なコマンドライン・オプションを定義しており、 エージェントのユーザ・インタフェースをできるだけ統一できるようにしている。 エージェントのプログラムの中からも、 これらのオプションの値を容易に利用できるようになっている。

標準コマンドライン・オプションの役割

現在は三つの標準コマンドライン・オプションが定義されている。 各々の意味は以下の通り:
-Agent
エージェント識別子を指定する。 エージェント識別子は一つのサーバに接続されたエージェント群の中で ユニークでなければならない。
エージェント識別子の文字列の末尾に "#" を指定すると、 そのエージェントの ProcessID で置換され、 同じプログラムを複数実行させることができる。
-Anchor
エージェントを代表する名前を指定する。 エージェントはここで指定された名前やそれを構成する名前の値が変わった時、 そのイベントに対してエージェント自身が定めた方法で応答することが期待される。 エージェントによってはこの名前を意識しない仕様にしても良い。
-Server
エージェントが接続すべきサーバを指定する。 サーバの指定の方法については、 エージェント起動時のサーバの選択 を参照のこと。


GlueLogicParseArgs 関数の機能

GlueLogicParseArgs 関数は、 標準コマンドライン・オプションと自分の引数の中に指定された追加のオプションとを、 そのエージェントが起動された時のコマンドライン引数の並びの中から引き出し、 それを perl 変数に代入する目的で使われる。

この関数は、内部で @ARGV の参照・変更を行なうため、 起動されたエージェント自身も @ARGV を使うようであれば、 最初に行なわれる @ARGV の参照よりも前に呼ばれなければならない。

コマンドライン・オプションは UNIX のオプション指定方法の伝統にしたがって、 キーワードの頭に '-' をつけた形式で表現される。 オプションをスイッチ ( 指定の有無に応じて ON と OFF だけを指定できる ) として使うのではなく、 プログラムから参照できる値を与えたい場合には '-' をつけたキーワードの後に、 空白で区切って値とするワードを続ける。

コマンドライン引数に与えられた情報は先頭から順に解釈され、 キーワードともその値とも解釈できない最初の情報の直前までをオプションとみなし、 それ以降はファイル名などの一般の引数の指定とみなす。 もしも '-' で始まる文字列をキーワードの指定と解釈されたくない場合には、 その直前に '--' を指定することにより、 '--' より後はオプションでないことを明示的に指示できる。
GlueLogicParseArgs 関数でオプションと解釈された情報は @ARGV から取り除かれ、 キーワードともその値とも解釈できない最初の情報から後のみが @ARGV に残される。

このようにして指定された値は、 "GlueLogic" という文字列の後にキーワードを Capitalize した文字列を繋げた名前を持つ perl 変数の値とされる。 標準コマンドライン・オプションもこれにしたがって、それらの値は -Agent , -Anchor , -Server にそれぞれ代入される。

これらの値は GlueLogicConnect 関数を実行する時に、 もっとも優先度の高いデータソースとして利用される。


コマンドライン引数の指定の例

hoge -Anchor foo configfile.cfg
hoge というエージェントを foo という名前をアンカーとして起動する。 -Anchor は標準コマンドライン・オプションである。 このエージェントに与える情報は configfile.cfg というファイルに与えられ、 この内容はエージェントのプログラムの中から <> 演算子で読み出すことができる。 また、 configfile.cfg という文字列そのものは $ARGV[0] で参照できる。

hoge -Agent ID -Param bar
hoge というエージェントを ID というエージェント識別子でサーバに接続して起動し、 bar という値をエージェントのプログラムからは $GlueLogicParam という perl 変数の値として参照できるようにする。 -Server は標準コマンドライン・オプションであるが、 -Param はユーザ定義のコマンドライン・オプションである。

hoge -Server machine foo bar
hoge というエージェントを machine という名前のホストで動いているサーバに接続して起動し、 リスト @ARGV( 'foo', 'bar' ) という値を持つようにする。


 [M.T. HomePage]  [written & copyrighted by Masayuki Takata]