如何在Perl中使用sprintf将填充填充为可变长度?

Mic*_*zer 4 perl printf zerofill

我想使用Perl的sprintf来对变量进行zerofill.

sprintf("%08d", $var);
Run Code Online (Sandbox Code Playgroud)

但我想动态确定zerofill有多少位数.

如何sprintf("%08d", $var)用一个名为$zerofill?的变量替换"8"in ?

bri*_*foy 15

sprintf的第一个参数只是一个字符串:

 my $zerofill = 9;
 my $number = 1000;
 my $filled = sprintf "%0${zerofill}d", $number;
Run Code Online (Sandbox Code Playgroud)

注意大括号将变量名称与字符串的其余部分分开.

我们将这个特殊问题作为Learning Perl中的一个稍微聪明的练习来提醒人们字符串只是字符串.:)

然而,正如mobrule在他的回答中指出的那样,sprintf有许多功能可以为您提供这种灵活性.这个看似简单的功能的文档很长,并且有很多好东西.


mob*_*mob 15

sprintfprintf支持该*符号(至少5.8以上):


printf "%0*d", 9, 12345;

000012345
Run Code Online (Sandbox Code Playgroud)
printf '$%*.*f', 8, 2, 456.78;

$  456.78
Run Code Online (Sandbox Code Playgroud)