То, как я увеличиваю значение с продвижением, обнуляет в Perl?

Это - тот же вопрос как этот, но Perl использования!

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

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

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

5
задан Community 23 May 2017 в 11:46
поделиться

6 ответов

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

for my $i ("00" .. "99") {
    print "$i\n";
}
13
ответ дан 18 December 2019 в 06:22
поделиться
foreach $i (1..99) {printf "%02d\n", $i;}
-121--4557617-

Попробуйте сделать следующее:

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 .

10
ответ дан 18 December 2019 в 06:22
поделиться
printf("%02d\n",$_) foreach (1..20)
2
ответ дан 18 December 2019 в 06:22
поделиться

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

0
ответ дан 18 December 2019 в 06:22
поделиться
foreach $i (1..99) {printf "%02d\n", $i;}
0
ответ дан 18 December 2019 в 06:22
поделиться

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

say for "01".."99"`

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

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

perl -E "say for '01'..'99'"
0
ответ дан 18 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: