你會怎麼做:當你調用一個函數
sub wut {
my @args = @_;
...
}
Perl的自動填充特殊@_
變量。可以以多種方式訪問它:
- 直接,通過簡單地使用
@_
或單獨的元件在其內作爲$_[0]
,$_[1]
,等等
- 通過將其分配給另一個數組,如上所示
通過將其分配給標量的列表(或可能的散列,或另一個陣列,或它們的組合):
sub wut {
my ($arg1, $arg2, $arg3, @others) = @_;
...
}
請注意,在這種形式下,您需要將數組@others
放在最後,因爲如果您將它放在較早的位置,它將吸取所有@_
的元素。換句話說,這是不行的:
sub wut {
my ($arg1, @others, $arg2) = @_;
...
}
您還可以使用shift
拉出值的@_
:
sub wut {
my $arg1 = shift;
my $arg2 = shift;
my @others = @_;
...
}
注意shift
將在@_
自動工作,如果你不提供它有一個論點。
編輯:您還可以通過使用散列或散列引用來使用命名參數。例如,如果你叫wut()
喜歡:
wut($arg1, { option1 => 'hello', option2 => 'goodbye' });
...然後你可以這樣做:
sub wut {
my $arg1 = shift;
my $opts = shift;
my $option1 = $opts->{option1} || "default";
my $option2 = $opts->{option2} || "default2";
...
}
這將是引進的命名參數到您的功能的好方法,讓你可以稍後添加參數,您不必擔心它們傳遞的順序。
如果你有*很多很多參數,你可能想避免複製它們:'sub wut {for my $ arg(@_){blah blah blah}}''。不過要小心,因爲'@ _'中的每個元素都是原始參數的別名,您可以**更改調用變量**。 – daotoad 2011-04-19 16:01:36
您可以在11分鐘內接受答案 – JOSHUA 2011-04-19 16:02:22
您可能還想通過'my%args = @_;' – friedo 2011-04-19 18:52:13