Perlで任意のコマンドラインオプションを処理するための良い(理想的にはCPAN)方法はありますか?
たとえば、文字列を取得して、データ構造"-a 1 -b 'z -x' -c -d 3 4"
のようなものを生成します。GetOpt::Long
{ a=>1, b=>"z -x", c=>1, d=>[3,4] } # d=>"3 4" is acceptable
警告はそれです
オプションのセットは事前にはわかりません。そのため、そのままでは使用できないよう
GetOpt::Long
です。値自体に他のオプションを含めることができるため、
#\b+-(\S+)\b#
パターンの文字列を解析してその文字列内のすべてのオプションを見つけることも不可能であるように思われ、一部のパラメータが= sタイプ、一部= s @、一部" -xabc"タイプ。さらに、#2を実行できたとしても、
GetOptionsFromString
引用符で囲まれた値を尊重する正しいトークン化をサポートしていますか?
注:演習の目的で、すべての引数が「オプション」であると想定します。つまり、文字列を(引用符で囲まれた)トークンに分割すると、構造は常に
"-opt1 arg1a [arg1b] -opt2 ....".
つまり、ダッシュで始まる単語/トークンはすべて新しいオプションであり、ダッシュで始まらない後続のすべての単語/トークンはそのオプションの値です。