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

时间:2010-12-29 09:08:31

标签: perl

请考虑以下示例代码。

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

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

sub test {
    my $error = sprintf(@_);
    print $error;
}

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

2 个答案:

答案 0 :(得分:8)

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

sub test {
    my $error = sprintf(shift, @_);
    print $error;
}

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

答案 1 :(得分:1)

perldoc说 sprintf FORMAT,LIST

返回由C库函数sprintf的常用printf约定格式化的字符串。有关详细信息,请参见下文,有关一般原则的说明,请参阅系统上的sprintf(3)或printf(3)。

我从不尝试这个,但我认为你可以尝试弹出@_来获取格式并在之后传递剩余的列表。