Perl,使用sprintf()

时间:2015-05-21 18:48:53

标签: perl printf

所以我尝试使用sprintf格式化字符串,并且我有一个可变格式设置供多次使用。但是在我的sprintf中使用它我无法弄清楚如何在没有Perl连接的情况下打印一封信。'我觉得它混合了两种格式,而不是最好的可读性或可维护性。

我的意思是

my $seconds_resolution= '%.4f';
my $seconds = 5.12345;

say sprintf("$seconds_resolutions" , $seconds);

引发错误

my $seconds_resolution= '%.4f';
my $seconds = 5.12345;
say sprintf("$seconds_resolution s" , $seconds);

对于用户来说空间是否有意义

my $seconds_resolution= '%.4f';
my $seconds = 5.12345;
say sprintf($seconds_resolution .'s' , $seconds);

这真的很难读懂

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:4)

这是插值中的常见问题,您可以简单地将变量名称包装在大括号中,以将其与不属于变量名称的字符串分开:

my $seconds_resolution= '%.4f';
my $seconds = 5.12345;

say sprintf("${seconds_resolution}s" , $seconds);
如果没有大括号,Perl就无法知道变量名称的停止位置和裸露的单词开始。

另一种方法是在您的格式字符串中加入s,然后您根本不必担心插值。注意:这是您的第三个示例实际执行的操作:

my $seconds_resolution= '%.4fs';
my $seconds = 5.12345;

say sprintf($seconds_resolution, $seconds);

另外,如果您还没有(我的示例中没有看到它们),您应始终启用use strict;use warnings;

答案 1 :(得分:1)

级联:

my $seconds_resolution = '%.4f';
sprintf "${seconds_resolution}s", $seconds

my $seconds_resolution = '%.4f';
sprintf $seconds_resolution."s", $seconds

格式单位:

my $seconds_resolution = '%.4fs';
sprintf $seconds_resolution, $seconds

可变单位:

my $seconds_resolution = '%.4f%s';
sprintf $seconds_resolution, $seconds, 's'