2012-04-06 6 views
3

Ich habe diese getopt:Kann Getopt :: Long GetOptions einen Fehler erzeugen, wenn die gleiche Option mehrmals auftritt?

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

Ist es möglich, Getopt::Long::GetOptions zu erkennen, wenn die gleiche Option für die Befehlszeile mehrere Male zur Verfügung gestellt? Zum Beispiel möchte ich folgendes einen Fehler zu erzeugen:

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

Dank

Antwort

7

Ich glaube nicht, gibt es einen direkten Weg, aber Sie haben zwei Möglichkeiten:

  • ein Array verwenden und überprüft, nachdem die Optionen Verarbeitung

    #!/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'; 
    } 
    
  • ein Unterprogramm verwenden und prüfen, ob der op tion ist bereits

    #!/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]; 
         } 
        } 
    ); 
    

    In diesem Fall definiert man ein Ausrufezeichen ! am Anfang der die und der Fehler abgefangen werden kann und als üblich Getopt Fehler gemeldet (die documentation of Getopt::Long für die Details)

Verwandte Themen