我有一个现有的Perl脚本,该脚本散列了许多使用Getopt :: Std(getopts函数)处理的命令行选项。但是我想用“ --testrun”和“ --cfgarray”添加2个新选项。 所以我用Getopt :: Long;和GetOptions('testrun'=> \ $ test_flag); “ --testrun”不带任何参数。简单地用作if($ test_flag)之类的标志。当单独运行时,它可以工作。但是由于在我的perl脚本中,都使用Getopt :: Long;。并使用Getopt :: Std; -我都收到错误-getopts api中的未知选项(在GetOptions之前调用)。可以在单个perl脚本中同时使用Getopt :: Std和Getopt :: Long。请帮帮我。预先感谢。
答案 0 :(得分:4)
Getopt::Std
和Getopt::Long
都只是解释@ARGV
,因此,如果弄弄了这一点,理论上可以在一个脚本中同时使用它们,或者多次呼叫GetOptions
。 但是,我不推荐使用-仅使用Getopt::Long
。
此代码:
use Getopt::Std;
getopts('a:b', \my %opts) or die "Bad options\n";
可以翻译成:
use Getopt::Long;
GetOptions(\my %opts, 'a=s', 'b') or die "Bad options\n";
,然后可以添加更多选项和长选项。在这里,我为选项-t
添加了一个简短的别名--testrun
,只是为了演示:
use Getopt::Long;
GetOptions(\my %opts, 'a=s', 'b',
'testrun|t', 'cfgarray' ) or die "Bad options\n";
答案 1 :(得分:1)
您不能同时使用这两种方法,但是Getopt::Long也支持简短的选项,因此您可以坚持使用。