Есть ли простой способ (без sprintf
и, разумеется, printf
) получить список (001, 002, ... 100)
в Perl? В bash это было что-то вроде seq -w 1 100
. Как насчет Перла?
Perl последовательность чисел с ведущими нулями
Ответы (2)
ты имеешь в виду вот так?
for ('001'..'100') {
print "$_\n";
}
..
в диапазоне возвращает список значений, считая по единицам, от левого значения до правого значения.
Дополнительные сведения об использовании диапазона см. в разделе оператор диапазона Perldoc. и эта ссылка
person
Gerhard
schedule
29.09.2017
Возможно, вы захотите объяснить оператор
..
.
- person simbabque; 29.09.2017
ставлю ссылку на документацию
- person matiit; 29.09.2017
Да это оно! Спасибо за ссылки!
- person Eugene Barsky; 29.09.2017
Важно понимать, что это следствие поведения оператора
++
со строками, которое оператор диапазона ..
использует под капотом.
- person Borodin; 30.09.2017
после того, как я подумал, как я могу сделать это в perl, я также заработал с bash - просто упомяните для справки: for i in {001..100};do echo ›››${i}‹‹‹;done`
- person eli; 30.07.2020
Printf был создан для таких проблем. Его использование поможет вам быстрее получить нужные ответы.
foreach my $number ( 1 .. 100 ) {
printf "%03d\n", $number;
}
%
означает «начало последовательности формата». 0
означает «начальные нули». 3
означает «минимум три цифры». d
означает «рассматривать параметр как цифры (целое число)».
person
Edwin Buck
schedule
29.09.2017
ОП не запросил
sprintf
. Предположительно, это относится и к printf
.
- person tjd; 29.09.2017
Я думаю, что причина отсутствия sprintf во многом связана с учебниками по Perl. По сути, они учат форматированию с помощью sprintf и каким-то образом избегают громкой рекламы того, что у них есть printf. Если бы я видел sprintf только для того, чтобы потом печатать, это казалось бы неуклюжим, неэлегантным и чего-то, чего следует избегать.
- person Edwin Buck; 29.09.2017
@ ЭдвинБак правда.
- person Gerhard; 29.09.2017
Спасибо за ваш комментарий! Возможно, мой вопрос был неясен, я хотел сделать это без sprintf или printf.
- person Eugene Barsky; 29.09.2017
'001'..'100'
должен создать этот список довольно хорошо. - person tjd   schedule 29.09.2017sprintf
? - person Borodin   schedule 29.09.2017seq -w
, поэтому решение сsprintf
кажется слишком «тяжелым». И да, нашлось еще более изящное решение. - person Eugene Barsky   schedule 29.09.2017sprintf
по какой-то причине запрещено, но на самом деле кажется, что такая подпрограмма, какsub d2 { sprintf '%02d', @_ }
, могла бы помочь. - person Borodin   schedule 30.09.2017