Perl:我如何将列表传递给脚本?

时间:2012-01-04 10:00:17

标签: perl list command-line-arguments

我需要将列表传递给我的脚本 我怎么能这样做?

例如我有脚本:flow.pl 我需要传递给它的fubs列表:

fub1, fub2, fub3 

和database1 =

的路径
path1 

和database2 =

的路径
path2 

我怎样才能获得这些参数?

 (through $ARGV[i]?)

如果我这样做:

flow.pl fub1,fub2,fub3 path1 path2

并在代码中:

$listoffubs = $ARGV[0]
$path1 = $ARGV[1]
$path2 = $ARGV[2]

fubs列表获得一个单词的fubs名称。

3 个答案:

答案 0 :(得分:7)

只要列表简短,就有了位置参数列表。一旦你进入了大量的参数或者你有一个内部结构的参数,那么你可能想看一下命名参数。

在这种情况下,我想我会考虑使用GetOpt::Long来实现命名参数。

答案 1 :(得分:5)

简单地拆分列表:

my @ListOfFubs = split /,/ ,  $listoffubs;

答案 2 :(得分:1)

你的参数将以空格分隔,所以是的,fub1,fub2,fub3将是一个参数。只需使用空间,你会没事的。 E.g:

flow.pl fub1 fub2 fub3 path1 path2

my $fub1 = shift;     # first argument is removed from ARGV and assigned to $fub1

或者

my $fub1 = $ARGV[0];  # simple assignment

一下子

my ($fub1,$fub2,$fub3,$path1,$path2) = @ARGV;  # all are assigned at once

请注意,使用shift会从@ARGV删除参数。

如果你有一个可能不同的参数列表,这是一个简单的修复,将它们放在最后,然后执行:

flow.pl path1 path2 fub1 fub2 fub3 ... fubn

my $path1 = shift;
my $path2 = shift;  # remove first two arguments, then
my @fubs  = @ARGV;  # assign the rest of the args to an array

对于更复杂的参数处理,请使用模块,例如Getopt::Long