如何为同一命令行参数传递多个参数?

时间:2017-04-03 22:49:03

标签: perl command-line

场景:我需要将多个电视节目的名称传递给脚本: 例如。 ./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确实包含所有参数,那么我该如何使用它们呢?

1 个答案:

答案 0 :(得分:3)

您可以使用分隔符传递参数:

Options with multiple values

  

通常允许以逗号分隔的值列表以及   多次出现的选项。使用Perl的split()很容易   和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"