场景:我需要将多个电视节目的名称传递给脚本:
例如。 ./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确实包含所有参数,那么我该如何使用它们呢?
答案 0 :(得分:3)
您可以使用分隔符传递参数:
通常允许以逗号分隔的值列表以及 多次出现的选项。使用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"