regexp vs. regexp+code
Sep. 26th, 2006 02:42 pmпоиск ip в тексте
PS.
# perl -MRegexp::Common=net -MBenchmark=timethese -de0
DB<1> $str = "a 192.168.1.1 test 192.168.300.1 testii 127.0.0.1 c"
DB<2> sub A () { return $str =~ m|($RE{net}{IPv4})|go; }
DB<3> sub B () { my @ret; while ($str =~ m|(\d+\.\d+\.\d+\.\d+)|g) { \
unless (grep { $_ > 255 } split /\./,$1) { push @ret,$1; } } \
return @ret; }
DB<4> timethese (10_000,{'A' => \&A,'B' => \&B})
Benchmark: timing 10000 iterations of A, B...
A: 36 wallclock secs (34.11 usr + 0.36 sys = 34.47 CPU) @ 290.11/s (n=10000)
B: 1 wallclock secs ( 0.48 usr + 0.00 sys = 0.48 CPU) @ 20833.33/s (n=10000)
PS.
DB<5> p $RE{net}{IPv4}
(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))
no subject
Date: 2006-09-26 12:00 pm (UTC)no subject
Date: 2006-09-26 12:08 pm (UTC)no subject
Date: 2006-09-26 12:27 pm (UTC)no subject
Date: 2006-09-26 12:38 pm (UTC)no subject
Date: 2006-09-26 12:24 pm (UTC)print A(), "\n", B();
no subject
Date: 2006-09-26 12:39 pm (UTC)no subject
Date: 2006-09-26 09:32 pm (UTC)timethese(-5, {A=> \&A, B => \&B}) Benchmark: running A, B for at least 5 CPU seconds... A: 5 wallclock secs ( 5.27 usr + 0.01 sys = 5.28 CPU) @ 208472.99/s (n=1100998) B: 6 wallclock secs ( 5.26 usr + 0.00 sys = 5.26 CPU) @ 33313.66/s (n=175157)