我有一个现有的Perl脚本,它有许多命令行选项,这些选项使用Getopt::Std
(getopts
函数(进行处理。但是,我想添加 2 个新选项:--testrun
和--cfgarray
.
我用了use Getopt::Long;
,GetOptions('testrun' => $test_flag);
"--testrun"不需要争论。 我只是把它当作像if($test_flag)
这样的标志.它在单独运行时工作。但是,由于在我的Perl脚本中既有use Getopt::Long;
又有use Getopt::Std;
,因此出现错误:
未知选项
从getopts
API (在GetOptions
之前调用时(。Getopt::Std
和Getopt::Long
可以在单个Perl脚本中使用吗?
Getopt::Std
和Getopt::Long
都只是解释@ARGV
,所以如果你摆弄它,理论上可以在一个脚本中使用它们,或者多次调用GetOptions
。然而我不推荐它 - 只是使用Getopt::Long
.
此代码:
use Getopt::Std;
getopts('a:b', my %opts) or die "Bad optionsn";
可以翻译成:
use Getopt::Long;
GetOptions(my %opts, 'a=s', 'b') or die "Bad optionsn";
然后,您可以添加更多选项和长选项。在这里,我为选项--testrun
添加了一个简短的别名-t
,只是为了演示:
use Getopt::Long;
GetOptions(my %opts, 'a=s', 'b',
'testrun|t', 'cfgarray' ) or die "Bad optionsn";
AFAIK 你不能同时使用两者,但 Getopt::Long 也支持短选项,所以你可以坚持下去。