2013-01-25 75 views
-1

這是我的問題:我想使用帶有動態數量參數的例程。舉例來說,這裏是我的子:在數組中傳遞參數Perl

dynamic_sub($firstMandatoryArgment, "second argument", $thirdArgument); 

我可以叫dynamic_sub與任意數量的參數(但有些是強制性的)。在我的程序中,參數的數量取決於上下文。所以我想寫這樣的事情:

my @args = ($firstMandatoryArgment, "second argument", $thirdArgument, ...); 

dynamic_sub(@args); 

的事情是我不能改寫dynamic_sub(),所以我必須找到一個辦法讓我的論點到一個數組,然後調用dynamic_sub()與我的一系列參數。當然@args應該被解釋爲許多參數,而不是作爲一個數組;)

提前謝謝!

+7

您*沒有*把你的參數到一個數組。有什麼問題? – TLP

+2

如果所有參數都是標量,則沒有問題。如果一個參數是一個數組,那麼在將參數「移動」到方法中的局部變量時必須小心。然後你可以使用引用。但你的問題是什麼? –

+0

嗯,它的工作原理。我犯了一個錯誤:( – user2011117

回答

4

在Perl中,子程序採用參數列表列表,其內部分配給數組@_。因此,在大多數情況下,使用數組或值列表調用子是同一件事。

一個例外是當子程序使用原型

sub without_prototypes { say "@_" } 
sub with_prototypes ($) { say "@_" } 

my @args = 1 .. 5; 

without_prototypes(@args); # @args is used in list context, prints "1 2 3 4 5\n". 
with_prototypes(@args); # @args is used in scalar context, prints "5\n" (length). 
&with_prototypes(@args); # the & disables prototypes; prints "1 2 3 4 5\n". 
1

,可以作爲參數傳遞的唯一的事情是標量的列表,以便

my @args = ($firstMandatoryArgment, "second argument", $thirdArgument, ...); 
dynamic_sub(@args); 

是一回事as

my @args = ($firstMandatoryArgment, "second argument", $thirdArgument, ...); 
dynamic_sub($args[0], $args[1], $args[2], ...); 

如果sub(愚蠢)使用原型覆蓋這種行爲,可以覆蓋原型使用&

&dynamic_sub(@args);