如何在Perl中使用前导零增加值?

时间:2010-02-09 09:40:42

标签: perl

问题与this one相同,但使用Perl!

我想用一个前导零迭代一个值。

shell中的等价物是:

for i in $(seq -w 01 99) ; do echo $i ; done

7 个答案:

答案 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 - 格式化值为有符号整数。

所以%02d2变为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'"