加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – “printf”和“print sprintf”之间的区别

发布时间:2020-12-15 21:53:41 所属栏目:大数据 来源:网络整理
导读:以下两个简单的perl程序有不同的行为: #file1printf @ARGV; #file2$tmp = sprintf @ARGV;print $tmp; $ perl file1 "hi %04d %.2f" 5 7.12345 #output: hi 0005 7.12 $ perl file2 "hi %04d %.2f" 5 7.12345 #output: 3 为什么不同?我原以为这两个程序是等
以下两个简单的perl程序有不同的行为:
#file1
printf @ARGV;
#file2
$tmp = sprintf @ARGV;
print $tmp;
$> perl file1  "hi %04d %.2f" 5  7.12345
   #output:  hi 0005 7.12
$> perl file2 "hi %04d %.2f" 5  7.12345
   #output:  3

为什么不同?我原以为这两个程序是等价的.不知道是否有办法让file2(使用“sprintf”)表现得像file1.

解决方法

内置的sprintf函数有一个原型:
$perl -e 'print prototype("CORE::sprintf")'
$@

它将第一个参数视为标量.由于您提供了@ARGV参数,因此通过传递@ARGV中的元素数量将其强制转换为标量.

由于printf函数必须支持语法printf HANDLE TEMPLATE,LIST以及printf TEMPLATE,LIST,因此它不支持原型.因此它始终将其参数视为平面列表,并使用列表中的第一个元素作为模板.

使第二个脚本正常工作的一种方法是将其称为

$tmp = sprintf shift @ARGV,@ARGV

printf和sprintf之间的另一个区别是print sprintf将$附加到输出,而printf没有(感谢,ysth).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读