2

Perl プログラム「transfer.pl」を作成しました。入力パラメーターはハッシュ値です (キーと値は文字列です)。コード セグメントは次のとおりです。

my %transfers = ();

if (!GetOptions("transfer=s" => \%transfers))
{
    Usage();
    exit(1);
}

Windowsシステムを使用しました。コマンドラインで、次のように入力しました。

perl tranfer.pl --transfer "table = %s"="[TableName=%s]"

table = %sキーがで値がであることを願っていますが[TableName=%s]、Getopt::Long は常に最初のものを見つけるようです。=そのため、キーはtableであり、値は%s=[TableName=%s]です。

入力したとき

perl tranfer.pl --transfer "テーブル \= %s"="[テーブル名\=%s]"

キーはtable \、値は%s=[TableName\=%s]です。

文字列値で「=」をバイパスして、コードを期待どおりに動作させる方法を知りたいですか?

どうもありがとうございました!

4

2 に答える 2

2

Getopt::Longこれは許可されません。最初=の値は常にキーを値から分離するために使用されます。ユーザー定義のサブルーチンを使用してオプションを処理するか、完了key=value後にペアを分割するか、キー内の aを表すためにGetOptions" " を使用するなどの任意のエスケープ メカニズムを使用する必要があります。%25=

于 2009-08-14T02:36:15.887 に答える
1

からGetopt::Long

オプションの宛先がハッシュへの参照である場合、オプションは、キー=値の形式の文字列を値として受け取ります。値は、指定されたキーとともにハッシュに格納されます。

GetOptions ("define=s" => \%defines);

または、次を使用できます。

GetOptions ("define=s%" => \$defines);

コマンド ライン オプションで使用する場合:

--define os=linux --define vendor=redhat

常に最初の " =" で分割されます。

于 2009-08-14T02:34:26.213 に答える