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