有没有一种好的(理想情况下是 CPAN)方法来使用 Perl处理任意命令行选项?
例如,获取一个字符串"-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@,一些 " -xab c" 类型。此外,即使我们可以做#2,是否
GetOptionsFromString
支持尊重引用值的正确标记?
注意:为了练习的目的,假设所有参数都是“选项”,换句话说,如果您将字符串拆分为(可能带引号的)标记,您的结构总是
"-opt1 arg1a [arg1b] -opt2 ....".
换句话说,任何以破折号开头的单词/标记都是一个新选项,所有后续不以破折号开头的单词/标记都是该选项的值。