perl file1 -6ren">
gpt4 book ai didi

perl - "printf"和 "print sprintf"之间的区别

转载 作者:行者123 更新时间:2023-12-04 10:07:28 24 4
gpt4 key购买 nike

以下两个简单的 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函数有一个原型(prototype):

$ perl -e 'print prototype("CORE::sprintf")'
$@

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

由于 printf函数必须支持语法 printf HANDLE TEMPLATE,LIST以及 printf TEMPLATE,LIST ,它不能支持原型(prototype)。所以它总是把它的参数当作一个平面列表,并使用列表中的第一个元素作为模板。

使其第二个脚本正常工作的一种方法是将其称为
$tmp = sprintf shift @ARGV, @ARGV
printf 之间的另一个区别和 sprintfprint sprintf附加 $\ 到输出,而 printf没有(谢谢,ysth)。

关于perl - "printf"和 "print sprintf"之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22827050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com