Getopt :: Longは変数オプション名に対応できますか?
-
27-10-2019 - |
質問
次のようなことができるスクリプトを書いています:
script-name --resource1= xxx --resource2= xxx
しかし、これは最大50以上になる可能性があります。GetOptに動的オプション名を受け入れさせる方法はありますか?
解決
Getopt :: Long のオプションリストを自動生成するのはどうですか以下の例?オプションのリストはかなり長くなる可能性があるため、 Getopt :: ArgvFile を使用すると許可されますコマンドラインでオプションを指定する代わりに、構成ファイルにオプションを指定します。 ジェネラコディセタグプレ
他のヒント
同じオプション名で機能しますか
例:script-name --resource=xxx --resource=xxx
はい、-#引数を受け入れたかったので、自分でそれを行う方法を理解しました。Getopt:: Longは、オプション名の正規表現を受け入れません。だからこれが私がしたことです: ジェネラコディセタグプレ
次にfilearg()関数を定義しました: ジェネラコディセタグプレ
つまり、必要なのはpass_throughオプションです。これは、必要なものをチェックし、表示されたときにそれらを設定します。上記では、未定義のオプションが関数に渡されました。これをファイルチェックと特別なオプション-#に使用します。#は整数です。一致しない場合は、badargs配列に追加します。これを行うと、GetOptionsが失敗することはないため、GetOptionsから戻った後でこの配列をチェックして、エラーが発生したかどうかを確認する必要があります。 GetOptionsがスクリプトを終了させるdie("!FINISH");
でコールバック関数を終了することにより、オプションエラーで終了させることもできます。
私が使用しているのは、-20 FILE1 -30 FILE2のようなものを使用できるため、後続のファイルのオプションを上書きできます。オプション名の最初の部分をチェックしてから値をチェックすることで、同様のことができるようになりました。したがって、すべてのオプションが--resource
で始まる場合は、関数で次のようなものを探します:/^--?(resource\w+)=(.*)$/
次に、オプション配列に追加します。
とにかく、これがお役に立てば幸いです。
もう1つの方法は、ある種の構成ファイルを使用することです。大量の情報を計画していることを考えると、これは書き込みと解析の両方を行うのに最も簡単な方法のようです。