【问题标题】:Getopt::Long passing several arguments to a subroutineGetopt::Long 将多个参数传递给子例程
【发布时间】:2014-11-10 17:24:15
【问题描述】:

如何将多个参数从命令行传递给Getopt::Long 中的函数?我的问题如下。我通过以下方式定义选项:

...

my $result = GetOptions('ham=s{2}' => \&hamming_distance); 

...

sub hamming_distance {
my @values = @_;
...
}

如果我用选项调用程序

--ham good wood

我有两次调用子程序hamming distance,一次是“good”,一次是“wood”,即@_的值是ham,good,然后是ham,wood。我怎样才能只得到一个带有两个参数的电话 - ham,good,wood

【问题讨论】:

  • --ham good wood 听起来不是一个选项,所以我想知道为什么它被作为一个选项来实现。

标签: perl getopt-long


【解决方案1】:
my @ham;
my $result = GetOptions('ham=s{2}' => \@ham)
   or usage();

hamming_distance(@ham) if @ham;

【讨论】:

  • 当然可以,我使用了另一种解决方案 - 仅使用一个字符串除以 , my $result = GetOptions('ham=s' => \&hamming_distance) 并在 hamming_distance 子例程中拆分值。我只是想,一定有办法,如何直接给函数两个参数。
【解决方案2】:

如果您不需要处理程序子例程,您可以简单地创建一个数组:

use warnings;
use strict;
use Getopt::Long;
use Data::Dumper;

my @values;
my $result = GetOptions('ham=s{2}' => \@values); 
print Dumper(\@values);

__END__

$VAR1 = [
          'good',
          'wood'
        ];

请注意,根据文档,此数组方法是实验性的。

【讨论】:

  • {2} 是实验性的,不是使用数组。
猜你喜欢
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 2016-02-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多