Это - тот же вопрос как этот, но Perl использования!
Я хотел бы выполнить итерации по значению со всего одним начальным нулем.
Эквивалент в оболочке был бы:
for i in $(seq -w 01 99) ; do echo $i ; done
Поскольку начальный ноль важен, предположительно вы хотите использовать их как строки, а не числа. В этом случае есть другое решение, которое не включает sprintf:
for my $i ("00" .. "99") {
print "$i\n";
}
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
.
Я бы подумал об использовании sprinft для форматирования $ i в соответствии с вашими требованиями. Например. printf '<% 06s>', 12;
выводит <000012>
.
Проверьте Perl-документ о sprinft , если вы не уверены.
Ну, если мы играем в гольф, то почему бы и нет:
say for "01".."99"`
(при условии, что вы используете 5.10 и сделали use 5.010
в верхней части вашей программы, конечно. )
А если вы делаете это прямо из оболочки, то это будет:
perl -E "say for '01'..'99'"