Может ли 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

Спасибо


person Libor Zapletal    schedule 06.04.2012    source источник


Ответы (1)


Я не думаю, что есть прямой путь, но у вас есть два варианта:

  • Используйте массив и проверьте после обработки параметров

    #!/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 (см. документацию Getopt::Long для получения подробной информации)

person Matteo    schedule 06.04.2012