Многие из именованных операторов (например, sprintf
) имеют специальные синтаксисы. Синтаксис sprintf
определен как
sprintf FORMAT, LIST
Это часто (но не всегда) можно увидеть, используя prototype
.
>perl -wE"say prototype 'CORE::sprintf'"
$@
Проблема в том, что вы использовали один из следующих синтаксисов вместо документированного синтаксиса.
sprintf ARRAY
sprintf LIST
Просто переключитесь на документированный синтаксис, чтобы решить вашу проблему.
sub printf2 {
my ($format, @args) = @_;
print sprintf($format, @args);
}
Или, если вы хотите избежать копирования,
sub printf2 {
print sprintf($_[0], @_[ 1..$#_ ]);
}