[Moscow.pm] Проверка IP на валидность

Kaltashkin Eugene zhecka на gmail.com
Пн Июн 9 07:44:20 PDT 2008


Anatoly Sharifulin пишет:
> :)
> Если нужна скорость, то регекспы вам не помогут.
> Делайте просто - inet_aton!
>
> Хотя я не знаю, за чем вы там гонитесь, сделал бы только на одной 
> регекспе.
На самом деле интересна скорость обработки.

Вот бенч конверта из inet_aton в презентабельный вид.

Для начала смотрим что быстрее всех распаковывает byteip в разные виды 
для хеширования.
unpackH 7f7f7f7f
ntoa 127.127.127.127
unpackint 127.127.127.127
unpackN 2139062143


cmpthese( 100000, {
unpackhex => sub { my $iaddr = inet_aton('127.127.127.127'); my $unaddr 
= unpack('H*',$iaddr);},
ntoa => sub { my $iaddr = inet_aton('127.127.127.127'); my $unaddr = 
inet_ntoa($iaddr); },
unpackint => sub { my $iaddr = inet_aton('127.127.127.127'); my $addr = 
join(".", map { $_ } unpack("C*",$iaddr)); },
unpackN => sub { my $iaddr = inet_aton('127.127.127.127'); my $addr = 
unpack("N*",$iaddr); },
});

              Rate unpackint      ntoa unpackhex   unpackN
unpackint  46545/s        --      -48%      -71%      -72%
ntoa       89510/s       92%        --      -45%      -46%
unpackhex 162025/s      248%       81%        --       -3%
unpackN   166234/s      257%       86%        3%        --






Подробная информация о списке рассылки Moscow-pm