所以我尝试使用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);
这真的很难读懂
任何建议都将不胜感激。
答案 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'