如果同一选项多次出现,Getopt :: Long GetOptions会生成错误吗?

时间:2012-04-06 14:44:18

标签: perl getopt-long

我有这个getopt:

GetOptions(  GetOptions ("library=s" => \@libfiles);
    @libfiles = split(/,/,join(',',@libfiles));
     "help" => \$help,
     "input=s" => \$fileordir,
     "pretty-xml:4" => \$pretty
);

Getopt::Long::GetOptions是否可以检测命令行上是否多次提供相同的选项?例如,我希望以下内容生成错误:

perl script.pl --input=something --input=something

由于

1 个答案:

答案 0 :(得分:7)

我不认为有直接的方法,但你有两个选择:

  • 使用数组并在处理选项后进行检查

    #!/usr/bin/perl
    
    use warnings;
    use strict;
    
    use Getopt::Long;
    
    my @options;
    my $result = GetOptions ('option=i' => \@options);
    
    if ( @options > 1 ) {
       die 'Error: --option can be specified only once';
    }
    
  • 使用子程序并检查选项是否已定义

    #!/usr/bin/perl
    
    use warnings;
    use strict;
    
    use Getopt::Long;
    
    my $option;
    my $result = GetOptions (
        'option=i' => sub {
            if ( defined $option) {
                die 'Error: --option can be specified only once';
            } else {
                $option = $_[1]; 
            }
        }
    );
    

    在这种情况下,您可以在!的开头使用感叹号die,错误将被捕获并报告为常见的Getopt错误(请参阅documentation of Getopt::Long详情)