Sec*_*one 1 perl variadic-functions
我想编写一个包装器printf(...).
我的第一次尝试是:
sub printf2 {
my $test = sprintf(@_);
print $test;
}
Run Code Online (Sandbox Code Playgroud)
由于数组(在标量上下文中)不是格式字符串,因此不起作用(如预期的那样).
有谁知道解决方案?可能没有使用任何特殊包装?
编辑:在真实的背景下,我想使用sprintf.显然,printf和之间存在差异sprintf.
该sprintf函数有一个($@) 原型,因此第一个参数sprintf始终在标量上下文中进行求值,即使它是一个数组.
$x = sprintf(@a); # same as sprintf(scalar @a)
Run Code Online (Sandbox Code Playgroud)
因此,在调用之前sprintf,您需要将模板与其余参数分开.这是一个简洁的方法:
sub printf2 {
my $test = sprintf(shift, @_);
print $test;
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,printf没有原型并做你期望的事情.
printf(@a); # same as printf($a[0], @a[1..$#a])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
929 次 |
| 最近记录: |