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


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : HB                                   2:5020/400     19 Jul 2001  15:31:21
 To : All
 Subject : Re: Пустые символы
 -------------------------------------------------------------------------------- 
 
 Pavel Ammosov wrote in <2553022996%9j57g5$2tn3$1@news.aha.ru>...
 
 >Sergey Belov wrote:
 >SB>Есть
 >SB>$_ = "first word  second word                           ";
 >SB>Hадо получить
 >SB>$_ = "first word  second word";
 >SB>Подскажите регэксп
 >
 >Я не виду разницы между твоими двумя строками, но, похоже, тебе надо
 >что-то такое?
 >
 > s#^\s*(.*?)\s*$#$1#gs; # вайт-спейс в начале и конце строк.
 
 [skipped]
 
 Павел, а с Томом Кристиансеном и Hатаном Торкингтоном вы не согласны?
 
 perldoc -q beginning/end
 
 Я решил проверить, насколько на самом деле ваш вариант slow and destructive.
 "Hапустил" оба регэкспа на строку длиной 5 MB (несколько длинных RFC слил в
 1 файл и этот файл в строку читается), засек время выполнения и объем
 памяти, занимаемый процессом perl в обоих случаях. Вот 1-й проверочный
 скрипт slow_trim.pl (ваш вариант):
 
 C:\> cat slow_trim.pl
 
 #!/usr/bin/perl -w
 use strict;
 use Time::HiRes qw/gettimeofday tv_interval/;
 binmode STDOUT;
 undef $/;
 $_ = <>;
 my $timer = [gettimeofday];
 s/^\s*(.*?)\s*$/$1/gs;     # <-----
 $timer = tv_interval($timer);
 print;
 warn "$timer seconds\n";
 <STDIN>;
 
 2-й скрипт fast_trim.pl отличается только регэкспом:
 
 C:\> cat fast_trim.pl
 
 #!/usr/bin/perl -w
 use strict;
 use Time::HiRes qw/gettimeofday tv_interval/;
 binmode STDOUT;
 undef $/;
 $_ = <>;
 my $timer = [gettimeofday];
 s/^\s+//;                  # <-----
 s/\s+$//;                  # <-----
 $timer = tv_interval($timer);
 print;
 warn "$timer seconds\n";
 <STDIN>
 
 Запускаем, объем занимаемой памяти смотрим в Task Manager:
 
 C:\> perl slow_trim.pl 5MB_text >out.slow
 
 1.782 seconds
 ^Z
 (Объем памяти perl.exe: 33388 KB)
 
 C:\> perl fast_trim.pl 5MB_text >out.fast
 
 0.22 seconds
 ^Z
 (Объем памяти perl.exe: 18104 KB)
 
 Т. е., как я понимаю, за счет .*? скорость в ~8 раз меньше, а памяти за счет
 копирования (.*?) в $1 расходуется почти в 2 раза больше. Конечно, все это
 не играет никакой роли для небольших строк. Hо в любом случае,
 
 s/^\s+//;
 s/\s+$//;
 
 ведь более просто и наглядно, чем
 
 s/^\s*(.*?)\s*$/$1/gs;
 
 Как вы считаете?
 
 --
 HB      mailto:npecca@yahoo.com?subject=Usenet
 --- ifmail v.2.15dev5
  * Origin: VoronezhSvyazInform ISP (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 Re: Пустые символы   HB   19 Jul 2001 15:31:21 
Архивное /ru.perl/6307c2541d63.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional