|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrew Degtiariov 2:5020/400 07 Oct 2003 13:46:43 To : Andrew Degtiariov Subject : Re: оптимизация -------------------------------------------------------------------------------- Вот, чтобы не было неясностей: ad@siena:ad>cat test.pl use strict; use Net::Netmask qw(); use Benchmark; use constant IP_ADDR => '127.0.0.1'; use constant NETWORK => '127.0.0.0/8'; sub matchip{ my $ip = shift; if($ip =~/\./){ $ip = unpack("N", pack("C4", split(/\./, $ip))); } for(@_){ my $net = $_; my($quad, $bits) = m!^(\d+\.\d+\.\d+\.\d+)(?:/(\d+))?!g; my $matchbits = 32 - ($bits || 32); my $int = unpack("N", pack("C4", split(/\./, $quad))); my $mask = 2**32-2**$matchbits; if(($int & $mask) == ($ip & $mask)){ return 1; } } return 0; } Benchmark::cmpthese(1000, { 'KPetrenko' => sub { my $flag = main::matchip IP_ADDR, NETWORK; }, 'Net::Netmask' => sub { my $block = new Net::Netmask NETWORK; my $flag = $block->match(IP_ADDR); } }); ad@siena:ad>>perl test.pl Benchmark: timing 1000 iterations of KPetrenko, Net::Netmask... KPetrenko: 0 wallclock secs ( 0.13 usr + 0.00 sys = 0.13 CPU) @ 7529.41/s (n=1000) (warning: too few iterations for a reliable count) Net::Netmask: 0 wallclock secs ( 0.35 usr + 0.00 sys = 0.35 CPU) @ 2844.44/s (n=1000) (warning: too few iterations for a reliable count) Rate Net::Netmask KPetrenko Net::Netmask 2844/s -- -62% KPetrenko 7529/s 165% -- ad@siena:ad> -- Andrew Degtiariov DA-RIPE --- ifmail v.2.15dev5 * Origin: Astral-Kiev (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/7561dd994c6c.html, оценка из 5, голосов 10
|