你会怎么做:当你调用一个函数
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