|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 07 Oct 2002 19:14:58 To : Dmitriy Kyrhlarov Subject : Re: s///m -------------------------------------------------------------------------------- Dmitriy Kyrhlarov wrote: > Скачал книжку по перлу в html. Сдампил ее в кучку txt-шек. > Задача: отрезать несколько строк в начале файла до известного > ограничителя, а так же отрезать строки от известного ограничителя до > конца файла. Множество вариантов. Простейший: perl -p -i.bak -e '$_="" if 1../^начало/ or /^конец/..eof' *.txt > Еще вопрос: > perldoc -q commas > > sub commify { > local $_ = shift; > 1 while s/^([-+]?\d+)(\d{3})/$1,$2/; > return $_; > } > > $n = 23659019423.2331; > print "GOT: ", commify($n), "\n"; > > GOT: 23,659,019,423.2331 > > Объясните, плз, КАК это работает. > > s/^([-+]?\d+)(\d{3})/$1,$2/; > Разбиваем число на 2 группы -- начало со знаком и конец из 3 цифр. Между > группами ставим "," и возвращаем. > > $n = 23659019423.2331; > print "GOT: ", commify($n), "\n"; > > GOT: 23,659,019,423.2331 > > Я ожидал увидеть 23659019,423.2331 > Поясните, плз, откуда рекурсия? Hикакой рекурсии нет. Есть рекуррентность. Выражение: 1 while s/^([-+]?\d+)(\d{3})/$1,$2/; это цикл, который выполняется (ничего не делая в теле) до тех пор, пока условие (оператор замены) выполняется. Андрей --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/657769ed0d22.html, оценка из 5, голосов 10
|