在 Perl 脚本中使用 Getopt::Std 和 Getopt::Long



我有一个现有的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;,因此出现错误:

未知选项

getoptsAPI (在GetOptions之前调用时(。Getopt::StdGetopt::Long可以在单个Perl脚本中使用吗?

Getopt::StdGetopt::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 也支持短选项,所以你可以坚持下去。

最新更新