3

Getoptオプションの 1 つとしてpackage およびGetopt::Long::Configurewithを使用する既存の Perl プログラムがpermuteあります。ただし、ユーザーが入力したオプションの順序を維持する必要があります。$RETURN_IN_ORDERに記載されているオプションがありますが、Long.pmどこにも使用されていないようです。

を渡すreturn_in_orderと、次のエラーが発生します。


Getopt::Long: C:/Program Files/IBM/RationalSDLC/common/lib/perl5/5.8.6/Getopt/Long.pm 行 1199 の不明な構成パラメーター「return_in_order」。


これがサポートされているかどうか、サポートされている場合は正しい使用方法を教えてください。そうでない場合は、私が持っている他の選択肢を知りたいです。

ありがとう。

4

7 に答える 7

6

「require_order」が欲しいと思います

http://perldoc.perl.org/Getopt/Long.html#Configuring-Getopt%3a%3aLong

于 2008-10-20T05:46:59.837 に答える
6

「require_order」を指す2つの回答がありますが、これらの回答はどちらも「require_order」の機能と求めているものの両方を誤解していると思います。

'require_order' が設定されていない場合は、(コマンド ラインで) 次のように記述できます。

-a file -b

-a と -b はどちらも単純なオプションです (引数を取らない)。「require_order」を設定すると、「file」が存在するとオプションが終了し、「-b」フラグが「ファイル名」になります。

あなたが求めているのは、'-a' が 'file' と '-b' の両方の前に現れたことを伝えるメカニズムだと思います。Getopt::Long がそれをサポートしているとは思いません。実際、私はそれを行う Getopt::* モジュールを知りません (私自身の未公開の Getopt::JLSS を除いて、私は時々使用します)。[このコードに興味がある場合は、姓と名の間にドットを使用して、Gmail にメールを送ってください。]

于 2008-10-20T06:25:26.907 に答える
5

require_order私がここに持っているマンページによると、それはと呼ばれています。:-)

于 2008-10-20T05:45:09.547 に答える
2

プログラムへの呼び出しの例を提供すると、おそらく役に立ちます。

Getopt::Long は、オプションと通常の「位置」引数の混合をサポートします。

./foo --option1 --option2 file1 file2 file3

GetOptions でオプションのみを解析すると、file1 から 3 が出現順に @ARGV に残されます。たぶん、あなたはその行動を使ってあなたが望むものを達成することができます.

さらに、同じオプションを複数回指定して、結果を配列に入れることができます (順番に!):

#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
my @permute;
GetOptions(
  'p=s' => \@permute,
);

print "$_\n" for @permute;

"perl foo.pl -p=1 -p=2 -p=3 -p=4" の結果は次のようになります: (注: "-p X" は "-p=X" と同じように機能します)

1
2
3
4
于 2008-10-20T08:08:46.043 に答える
2

コマンド ライン パラメーターは、次のようにオプションと引数の組み合わせになるため、私の場合の要件は大きく異なります。

mytool -arg1 値 1 -arg2 値2 -arg3 値3

これが、require_order が特に役に立たない理由です。

そして、私が理解したように、問題は実際には解析コンポーネントにあるわけではありません。それらを保存するために使用されるハッシュオブジェクトがあります。

tsee rightが指摘したように、デフォルトの構成を使用する場合、順序は同じになります。

とにかく、ありがとう。

于 2008-10-20T10:13:17.883 に答える
1

オプションが指定された順序を知る必要があるのは、私がまだ Getopt::Mixed を使用している理由です。そのモジュールには、ループできる nextOption 関数があり、コマンドラインにあった順序でオプションを提供します。

これに対する私のユースケースは、正規表現を含めて除外することです:

myscript /usr --include /usr/local/bin --exclude /usr/local

もちろん、実際に何が起こるかは、スクリプトでインクルードとエクスクルードを処理する方法にも依存しますが、順序を知る必要があります。

于 2013-08-13T17:15:05.723 に答える