Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 s///m   Dmitriy Kyrhlarov   07 Oct 2002 18:13:38 
 Re: s///m   Artem Chuprina   07 Oct 2002 19:12:56 
 Re: s///m   Andrey Sapozhnikov   07 Oct 2002 19:14:58 
Архивное /ru.perl/657769ed0d22.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional