4

私は perl スクリプトを実行しており、コマンド ラインから複数の値を取得する必要があります。例:

perl script.pl --arg1 op1 op2 op3

私は Getopt::Long を使用していますが、これを機能させることができます:

perl script.pl --arg1 op1 --arg1 op2 --arg1 op3

しかし、私は本当に最初のオプションが必要です (欲しいです)。

私は彼らのドキュメントをチェックインしましたが、これは私が望むことをするはずです:

GetOptions('arg1=s{3}' => \@myArray);

http://search.cpan.org/~jv/Getopt-Long-2.38/lib/Getopt/Long.pm#Options_with_multiple_values

しかし、私はこのエラーが発生しています:

オプション指定のエラー: "arg1=f{3}"

アイデア/解決策はありますか?

4

4 に答える 4

4

あなたのコードは私にとってはうまくいきますが、その機能は Getopt::Long に最近追加されたばかり (バージョン 2.35) のように見えるので、古いバージョンの Getopt::Long を使用している可能性があります。走る

perl -MGetopt::Long -le'print $Getopt::Long::VERSION;'

あなたが持っているバージョンを確認します。

于 2012-05-11T20:18:12.650 に答える
4

あなたの問題はf{3}. float引数 (実数)fに使用されます。引数として文字列がある場合は、指定子を使用する必要があります。引数の数に関して、ドキュメントには次のように記載されています。 s

オプションが取る引数の最小数と最大数を指定することもできます。foo=s{2,4} は、少なくとも 2 つ、最大で 4 つの引数を取るオプションを示します。foo=s{,} は 1 つ以上の値を示します。foo:s{,} は、0 個以上のオプション値を示します。

docs の hise note を考慮して、ニーズに合わせて調整してください。

于 2012-05-11T20:18:36.920 に答える
2

なぜ人々がこのソリューションを提供しなかったのかはわかりませんが、この投稿は非常に古いため、おそらく今となっては手遅れです。

私が見つけたこれを自動的に行う方法はありません。

あなたがする必要があるのは、複数の引数を引用符で囲み、コード内でそれらを解析することです:

perl myscript.pl -m 'a b c'

-m 引数の値をコード内で分割し、そこから必要なことを実行します。

于 2013-09-03T04:40:34.833 に答える