Perl,使用sprintf()以常量格式打印字母

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

所以我尝试用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);
这真的很难读


如果您有任何建议,我们将不胜感激。

这是插值中的常见问题,您只需将变量名用大括号括起来,将其与不属于变量名一部分的字符串分开:

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中使用一行程序的好处之外,它与周围的
比如说
更为一致。