【问题标题】:using Getopt::Std and Getopt::Long in a Perl script在 Perl 脚本中使用 Getopt::Std 和 Getopt::Long
【发布时间】:2018-07-02 07:14:19
【问题描述】:

我有一个现有的 Perl 脚本,它有许多使用Getopt::Stdgetopts 函数)处理的命令行选项。但是,我想添加 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::StdGetopt::Long 可以在单个 Perl 脚本中使用吗?

【问题讨论】:

    标签: perl getopt getopt-long


    【解决方案1】:

    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";
    

    然后您可以添加更多选项和长选项。在这里,我为选项--testrun 添加了一个简短的别名-t,只是为了演示:

    use Getopt::Long;
    GetOptions(\my %opts, 'a=s', 'b',
        'testrun|t', 'cfgarray' ) or die "Bad options\n";
    

    【讨论】:

      【解决方案2】:

      AFAIK 你不能同时使用两者,但Getopt::Long 也支持短选项,所以你可以坚持下去。

      【讨论】:

      • 好的,谢谢。然后我想用 GetOptions 来做 getopts("yjfei:o:j:z:", \%opts); .在 GetOptions (Getopt::Long;) 中,我们可以将参数提供给 hash 吗?同时我想为数组获取一些值。 (正如我在问题中提到的那样。我们可以两者都做吗?)我还读到我们不能在程序中多次调用 GetOptions。你能给我举个例子,GetOptions 被用来让 getopts("yjfei:o:j:z:", \%opts) 进入那个哈希选项。并且还将3个整数放入一个数组中。提前致谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多