- RU.PERL ----------------------------------------------------------- RU.PERL - Msg : #3031 [502] От : Nick Kostirya 2:5020/400 24 марта 04, 13:24 Кому : Sergey Zhuravlev 24 марта 04, 20:39 Тема : Re: Убрать пробелы в хеше ------------------------------------------------------------------------------- From: "Nick Kostirya""Sergey Zhuravlev" сообщил/сообщила в новостях следующее: news:c3rll1$lms$1@host.talk.ru... > Привет. > > AP> ага и не следует забывать, что конструкция s/^\s*(.*?)\s*$/$1/ в > общем случае > AP> работает медленнее идущих подряд s/^\s+// и s/\s+$//... читай с > выражением > AP> умные книжки по регулярным выражениям (пардон за каламбур) > > Слышал я, что умные книжки не всем помогают... > > rbcmaint-2.04$ perl -MBenchmark -e ' > $_="sdgfdsfgsdfg"; > timethese(1000000, > {one => sub {s/^\s+|\s+$//g}, > ones => sub {s/^\s*(.*)\s*$/$1/}, > two => sub {s/^\s+//; s/\s+$//;} > } ); > ' > Benchmark: timing 1000000 iterations of one, ones, two... > one: 0 wallclock secs ( 0.50 usr + 0.00 sys = 0.50 CPU) @ > 2000000.00/s (n=1000000) > ones: 17 wallclock secs (11.77 usr + -0.02 sys = 11.76 CPU) @ > 85049.83/s (n=1000000) > two: 1 wallclock secs ( 0.76 usr + 0.00 sys = 0.76 CPU) @ > 1319587.63/s (n=1000000) > > -- А вот так my $str="sdgfdsfgsdfg"; timethese(1000000, { one => sub {s/^\s+|\s+$//g for ($str)}, ones => sub { s/^\s*(.*)\s*$/$1/ for ($str)}, two => sub { s/^\s+//, s/\s+$// for ($str)} }); Benchmark: timing 1000000 iterations of one, ones, two... one: 9 wallclock secs ( 9.38 usr + -0.01 sys = 9.37 CPU) @ 106678.05/s (n=1000000) ones: 14 wallclock secs (13.70 usr + 0.00 sys = 13.70 CPU) @ 72992.70/s ( n=1000000) two: 4 wallclock secs ( 5.24 usr + 0.00 sys = 5.24 CPU) @ 190876.12/s (n=1000000) Говорит, что умные книжки читать надо умно. Вообще-то Benchmark делает local $_; Вот так-то :-) --- ifmail v.2.15dev5.3 * Origin: Demos online service (2:5020/400)