2012-01-04 53 views
4

我需要將列表傳遞給我的腳本 我該怎麼做?Perl:如何將列表傳遞給腳本?

,比如我有腳本:flow.pl 我需要傳遞給它fubs的名單:

fub1, fub2, fub3 

和路徑數據庫1 =

path1 

和路徑DATABASE2 =

path2 

我怎樣才能得到這個參數?

(through $ARGV[i]?) 

,如果我這樣做:

flow.pl fub1,fub2,fub3 path1 path2 

,並在代碼:fubs的

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

名單得到這樣一個詞fubs的名稱。

回答

5

,只需拆分列表:

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

你的參數將被空格隔開,所以是的,fub1,fub2,fub3將是一個參數。只需使用空間,而且你會沒事的。例如: -

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

7

只要列表短而簡單,就可以有位置參數列表。一旦你進入了大量的參數或者你有一個內部結構的參數,那麼你可能想看看命名參數。

在這種情況下,我想我會考慮使用GetOpt::Long來實現命名參數。

相關問題