Perl,使用sprintf()以常量格式打印字母
所以我尝试用sprintf格式化一个字符串,我有一个多用途的可变格式设置。但是在我的sprintf中使用它时,我不知道如何在没有Perl连接的情况下打印字母。我觉得这是两种格式的混合,对于可读性或可维护性来说不是最好的 我的意思的例子是Perl,使用sprintf()以常量格式打印字母,perl,printf,Perl,Printf,所以我尝试用sprintf格式化一个字符串,我有一个多用途的可变格式设置。但是在我的sprintf中使用它时,我不知道如何在没有Perl连接的情况下打印字母。我觉得这是两种格式的混合,对于可读性或可维护性来说不是最好的 我的意思的例子是 my $seconds_resolution= '%.4f'; my $seconds = 5.12345; say sprintf("$seconds_resolutions" , $seconds); 抛出错误 my $seconds_resolutio
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);
这真的很难读
如果您有任何建议,我们将不胜感激。这是插值中的常见问题,您只需将变量名用大括号括起来,将其与不属于变量名一部分的字符串分开:
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);
此外,如果您还没有(我在您的示例中没有看到),您应该始终启用和这是插值中的一个常见问题,您可以简单地将变量名用大括号括起来,将其与不属于变量名的字符串分开:
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);
另外,如果您还没有(我在您的示例中没有看到),您应该始终启用和连接:
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'
串联:
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'
次要,但是
说sprintf$fmt,$foo
可能写得更好printf“$fmt\n”,$foo
@thisSuitesBlack不公平。我真的不知道在这之后数据将如何使用,比如说
可能只是用于测试,所以我把它保持原样。我一直使用比如sprintf
。除了在Windows中使用一行程序的好处外,它与周围的say
.Minor更为一致,但是say sprintf$fmt,$foo
可能写得更好printf“$fmt\n”,$foo
@thisSuitesBlack不公平。我真的不知道在这之后数据将如何使用,比如说
可能只是用于测试,所以我把它保持原样。我一直使用比如sprintf
。除了在Windows中使用一行程序的好处之外,它与周围的比如说更为一致。