在sprintf函数调用

时间:2016-08-09 05:06:45

标签: perl

我的问题是im打印的返回值没有被翻译成值。

我在测试文件中有以下代码。

#!/usr/bin/perl -I/srv/www/jonathan/m/www    
my $var = sprintf("$%.1f lbs",(77*2.20462));
print $var;

它返回:0.1f而不是我需要看到的值。

我在这里做错了什么?我是个新手。

2 个答案:

答案 0 :(得分:2)

你的问题是Perl将“$%。1f”解释为变量$%,后跟“.1f”。 $%是一个特殊的Perl变量,包含“当前所选输出通道的当前页码”(参见perlvar),其值为0,因此打印的是字符串“0.1f”。

这有几种方法。

您可以删除美元符号:sprintf("%.1f lbs",(77*2.20462))。但是这会改变你显示的字符串。

你可以逃避美元告诉Perl它并不特别:sprintf("\$%.1f lbs",(77*2.20462))

但我认为有更好的解决方案。 Perl将美元符号视为双引号字符串中的特殊字符。但是你的字符串没有理由被双引号。因此,只需更改格式字符串即可使用单引号:sprintf('$%.1f lbs',(77*2.20462))

最后一个是我使用的解决方案。

答案 1 :(得分:1)

Perl使用 dolar($)符号来声明标量变量,您需要从sprintf中删除$符号。

更正后的代码

my $var = sprintf("%.1f lbs",(77*2.20462));
print $var;

输出

169.8 lbs