答案 0 :(得分:13)
由于前导零是重要的,大概你想要将它们用作字符串,而不是数字。在这种情况下,有一个不同的解决方案,不涉及sprintf:
for my $i ("00" .. "99") {
print "$i\n";
}
答案 1 :(得分:10)
尝试这样的事情:
foreach (1 .. 99) {
$s = sprintf("%02d",$_);
print "$s\n";
}
..
被称为Range Operator,可以根据其上下文执行不同的操作。我们在列表上下文中使用它,因此它从左值到右值计数。所以这是一个使用它的简单例子;这段代码:
@list = 1 .. 10;
print "@list";
有这个输出:
1 2 3 4 5 6 7 8 9 10
sprintf
function允许我们格式化输出。格式字符串%02d
细分如下:
%
- 格式字符串的开头0
- 使用前导零2
- 至少两个字符d
- 格式化值为有符号整数。所以%02d
将2
变为02
。
答案 2 :(得分:2)
printf("%02d\n",$_) foreach (1..20)
答案 3 :(得分:1)
print foreach ("001" .. "099")
答案 4 :(得分:0)
我会考虑使用sprinft根据您的要求格式化$ i。例如。 printf '<%06s>', 12;
打印<000012>
。
如果您不确定,请检查Perl doc about sprinft。
答案 5 :(得分:0)
foreach $i (1..99) {printf "%02d\n", $i;}
答案 6 :(得分:0)
好吧,如果我们打高尔夫,为什么不呢:
say for "01".."99"`
(假设您正在使用5.10并且在程序的顶部已经完成了use 5.010
。)
如果你直接从shell那里做,那就是:
perl -E "say for '01'..'99'"