是否可以将sprintf类型参数传递给Perl函数?

per*_*lit 3 perl

请考虑以下示例代码.

my $a = "test";
my $b = "stackoverflow";

test("%s - %s\n", $a, $b);

sub test {
    my $error = sprintf(@_);
    print $error;
}
Run Code Online (Sandbox Code Playgroud)

这打印3而不是格式化的字符串.甚至可以做我正在尝试的事情吗?

cjm*_*cjm 8

正如VGE所说,它是造成问题的原型,但你需要使用shift,而不是pop:

sub test {
    my $error = sprintf(shift, @_);
    print $error;
}
Run Code Online (Sandbox Code Playgroud)

sprintf在标量上下文中计算其第一个参数.如果那是一个数组,你得到数组的长度.