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

时间:2018-07-02 07:14:19

标签: perl getopt getopt-long

我有一个现有的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。请帮帮我。预先感谢。

2 个答案:

答案 0 :(得分:4)

Getopt::StdGetopt::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也支持简短的选项,因此您可以坚持使用。