2017-04-03 29 views
1

场景:我需要将多个电视节目的名称传递给脚本: 例如。 ./script -a "Homeworld" -a "Supernatural"如何为相同的命令行参数传递多个参数?

我正在使用Getopt :: Long :: Configure来获取选项。

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; 

当前,脚本只接收到最后指定的参数。如何检测是否有多个参数传递给命令行?

@ARGV确实包含所有参数,所以我该如何使用它们?

回答

3

你可以只通过参数用分隔符:

Options with multiple values

往往是允许值的逗号分隔的列表,以及选项 多次出现有用。这是很容易使用Perl的分裂() 和join()操作符:

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

或者另一种选择是:

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

为了实现这种行为,只需指定数组引用作为 可供选择的目的地:

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

使用的第一个例子,你的命令行是:

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

使用第二个例子,你的命令行是:

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