Он ведет себя правильно во всех существующих Perl переводчиков.
Однако порядок оценки операндов оператора запятой документируется, когда он используется в скалярном контексте, но не для тех случаев, когда он используется в контексте списка в данном случае. Хуже того, это недокументированное поведение в области, которая является неопределенным поведением на некоторых других языках. Я не вижу, как меняется поведение, но это тоже небезопасно.
Компромисс:
sub f3 {
my $self = shift;
my $p1 = shift;
my $p2 = shift;
$self->update(p1 => $p1, p2 => $p2, @_);
}
Если вы абсолютно хотели пойти с переменной менее, вы можете смело использовать следующее:
sub f4 { $_[0]->update(p1 => $_[1], p2 => $_[2], @_[3..$#_]) }
Я не знаю, почему вы хотели бы использовать что , хоть. Трудно читать, даже не считая потери самодокументирующих свойств именования параметров.
safe ≠ readable – choroba
Если вы не пытаетесь выиграть в гольф, сделайте подробный. –