Ответ 1
Вы бы сделали:
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";
...
}
Это будет хороший способ ввести именованные параметры в ваши функции, чтобы впоследствии вы могли добавлять параметры, и вам не нужно беспокоиться о том, в каком порядке они передаются.