Когда вызывается подпрограмма, переданные параметры помещаются в специальный массив @_
.Можно использовать этот массив, сдвигая значения my $foo = shift
или путем прямого присвоения массива my ($foo,$bar)=@_;
Можно даже использовать значения непосредственно из массива: $_[0]
Почему одни против других?Прямое присвоение массивов является наиболее стандартным и распространенным.Иногда способ сдвига используется, когда есть необязательные конечные значения.Прямое использование массива не рекомендуется, за исключением нескольких небольших ниш: функций-оболочек, которые вызывают другие функции, особенно внутри объектов.функции, которые обертывают другие функции и и изменяют входы.Также специальная форма goto &func
, которая немедленно отбрасывает текущий стек вызовов и вызывает func с текущим значением @_
.
# use shift for optional trailing values
use v5.10;
my $foo = shift;
my $bar = shift // 'default bar value';
my $baz = shift // 'default baz value';
#obj method to call related non-object function.
sub bar { my $self = shift; _bar(@_) }
sub longname { shortname(@_) }
sub get { return $_[0]->$_[1]; }