2017-04-03 2 views
1

Szenario: Ich muss die Namen mehrerer Fernsehsendungen an ein Skript übergeben: Eg. ./script -a "Homeworld" -a "Supernatural"Wie übergeben Sie mehrere Parameter für das gleiche Kommandozeilenargument?

Ich verwende Getopt :: Long :: Configure, um die Optionen zu erhalten.

sub ArgParser 
{ 
    my ($help,$addshow,$delshow,$checkshow,$listshows) =(); 
    GetOptions ('help|h' => \$help,    
       'add|a=s' => \$addshow,    
       ); 
    if ($help) 
    { 
     HelpPrint;  
    } 
    elsif ($addshow) 
    { 
     say $addshow;  
    } 
    else 
    {   
     HelpPrint("Invalid option or no options specified!"); 
    } 
    exit; 
} 

ArgParser; 

Momentan wird nur das zuletzt angegebene Argument vom Skript empfangen. Wie kann ich feststellen, ob mehrere Parameter für dasselbe Argument in der Befehlszeile übergeben werden?

@ARGV enthält alle Argumente, also wie kann ich sie verwenden?

Antwort

3

Sie könnten nur das Argument mit einem Separator passieren:

Options with multiple values

Oft ist es sinnvoll, durch Komma getrennte Listen von Werten sowie mehr Vorkommen der Optionen zu ermöglichen. Dies ist leicht Perl Split() verwendet und join() Operatoren:

GetOptions ("library=s" => \@libfiles); 
    @libfiles = split(/,/,join(',',@libfiles)); 

Oder eine andere Option ist:

--library lib/stdlib --library lib/extlib 

dieses Verhalten zu erreichen, einfach ein Array Referenz als die angeben Ziel für die Option:

GetOptions ("library=s" => \@libfiles); 

Mit dem ersten Beispiel der Befehlszeile sei:

./script -a "Homeworld" -a "Supernatural" -a "Breaking Bad" 
    -or- 
./script -a "Homeworld,Supernatural,Breaking Bad" 
    -or- 
./script -a "Homeworld,Supernatural" -a "Breaking Bad" 

das zweite Beispiel verwenden, würde die Befehlszeile sein:

./script -a "Homeworld" -a "Supernatural" -a "Expanse, The" 
Verwandte Themen