2012-04-06 26 views
3

我有这样的getopt:Can Getopt :: Long如果同一选项多次出现,GetOptions会产生错误?

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 

感谢

回答

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的细节)

相关问题