请考虑以下示例代码。
my $a = "test";
my $b = "stackoverflow";
test("%s - %s\n", $a, $b);
sub test {
my $error = sprintf(@_);
print $error;
}
这打印3而不是格式化的字符串。甚至可以做我正在尝试的事情吗?
答案 0 :(得分:8)
正如VGE所说,这是造成问题的原型,但您需要使用shift
,而不是pop
:
sub test {
my $error = sprintf(shift, @_);
print $error;
}
sprintf
在标量上下文中计算其第一个参数。如果那是一个数组,你得到数组的长度。
答案 1 :(得分:1)
返回由C库函数sprintf的常用printf约定格式化的字符串。有关详细信息,请参见下文,有关一般原则的说明,请参阅系统上的sprintf(3)或printf(3)。
我从不尝试这个,但我认为你可以尝试弹出@_来获取格式并在之后传递剩余的列表。