Я довольно новичок в Perl и с трудом переворачиваю голову вокруг своей неявной системы типов. То, что мне нравится, это простая функция-обертка, которая имеет ту же подпись, что и функция, которую она обертывает, чтобы ее можно было использовать на своем месте.Правильное прямое возвращаемое значение в Perl
Итак, у меня есть существующая функция orig
, которую я хочу обернуть. Я принимаю несколько входных аргументов и имеет разные типы возвращаемых данных, основанные на этих аргументах. До тех пор, пока я пишу обертку следующим образом возвращаемых типов такие же, как исходная функция, и все это прекрасно работает:
sub wrapper {
my ($first) = @_;
print "before. first argument: $first\n";
return orig(@_);
}
Однако, если я хочу, чтобы выполнить код в обертке после выполнения orig
Я не знаю, как я сохраняю типы. По моему мнению, так же, как и вход в perl-функцию, всегда является массивом скаляров, поэтому выход. Таким образом, решение должно быть таким:
sub wrapper {
my ($first) = @_;
print "before. first argument: $first\n";
my @result = orig(@_);
print "after";
return @result;
}
Но это не работает должным образом. Что мне не хватает? Как написать такую функцию обертки, что она работает правильно для произвольных типов возврата?
Да, это было. Выполнение диспетчеризации Wantarray заставляет его работать. Тем не менее, я попробую подход с Class :: Method :: Modifiers, так как это было бы самым элегантным. –