Как увеличить значение с ведущими нулями в Perl? - PullRequest
5 голосов
/ 09 февраля 2010

Это тот же вопрос, что и , этот , но с использованием Perl!

Я бы хотел перебрать значение только с одним начальным нулем.

Эквивалент в оболочке будет:

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

Ответы [ 6 ]

13 голосов
/ 09 февраля 2010

Так как начальный ноль является значимым, предположительно, вы хотите использовать их как строки, а не числа. В этом случае есть другое решение, которое не включает sprintf:

for my $i ("00" .. "99") {
    print "$i\n";
}
10 голосов
/ 09 февраля 2010

Попробуйте что-то вроде этого:

foreach (1 .. 99) {
   $s = sprintf("%02d",$_);
   print "$s\n";
}

.. называется оператором диапазона и может делать разные вещи в зависимости от контекста Мы используем его здесь в контексте списка, чтобы он отсчитывал от левого до правого значения. Итак, вот простой пример его использования; этот код:

@list = 1 .. 10; 
print "@list";

имеет такой вывод:

1 2 3 4 5 6 7 8 9 10

Функция sprintf позволяет нам форматировать вывод. Строка формата %02d разбита следующим образом:

  • % - начало строки формата
  • 0 - использовать ведущие нули
  • 2 - шириной не менее двух символов
  • d - форматировать значение в виде целого числа со знаком.

Итак, %02d - это то, что превращает 2 в 02.

2 голосов
/ 09 февраля 2010
printf("%02d\n",$_) foreach (1..20)
0 голосов
/ 10 февраля 2010

Ну, если мы играем в гольф, почему бы и нет:

say for "01".."99"`

(при условии, что вы используете 5.10 и, конечно, набрали use 5.010 в начале вашей программы.)

И если вы сделаете это прямо из оболочки, это будет:

perl -E "say for '01'..'99'"
0 голосов
/ 09 февраля 2010
foreach $i (1..99) {printf "%02d\n", $i;}
0 голосов
/ 09 февраля 2010

Я бы хотел использовать sprinft для форматирования $ i в соответствии с вашими требованиями.Например, printf '<%06s>', 12; печатает <000012>.Проверьте Perl doc о sprinft , если вы не уверены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...