<div dir="ltr"><div><div>У тебя может быть overload в нескольких местах:<br></div>1) В массиве @ips<br></div>2)  while( $ipn < $ipn->broadcast )              --- вызов метода + overload<br>
3) my $iponly = (split '/', $ipn++)[0]; #get<span class="gmail-im">     --- overload в чистом виде + преобразование в строку.<br><br><br></span><div><div><div><div><div><br></div></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">25 ноября 2016 г., 14:38 пользователь Naim Sh via Moscow-pm <span dir="ltr"><<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Оки и какой вариант быстрее того же map будет .<br>
код имеет такой вид ( точнее его кусок который больше всего времени и ест )<br>
<br>
массив @ips имеет стандартные ipv4 адреса типа 10.56.6.2, 10.135.8.23  , 10.135.22.43 и тд и тп .<br>
<br>
        my $ipn = NetAddr::IP->new("$first_ip/$n<wbr>etmask");<br>
<br>
        while( $ipn < $ipn->broadcast )<br>
        {<br>
            my $iponly = (split '/', $ipn++)[0]; #get<span class=""><br>
<br>
            if ( ! ( grep {$iponly eq $_}  @ips )  )<br></span>
            {<br>
                return $iponly;<br>
            }<br>
<br>
        }<br>
<br>
first отдает не то что мне нужно из под этой сети адрес в данном случае 10.135.x.y а 10.56.x.y хотя да он первый пустой, но grep выдает то что нужно.<br>
<br>
Вроде tie переменных и т.д нету<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
On 11/25/2016 03:29 PM, Sergey Aleynikov via Moscow-pm wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Добрый день,<br>
<br>
map будет быстрее только если поисков по одному и тому же исходному<br>
массиву @ips будет несколько - т.к. операция построения хэша дорогая.<br>
Одноразовый поиск - греп быстрее. first возвращает другое (по смыслу)<br>
значение, чем греп (элемент, а не количество), но логически для этой<br>
задачи разницы быть не должно.<br>
<br>
PS: my %ips; @ips{@ips} = (); быстрее, чем my %ips = map { $_ => 1 } @ips;<br>
<br>
Best regards,<br>
Sergey Aleynikov<br>
<br>
<br>
25 ноября 2016 г., 14:00 пользователь Naim Sh via Moscow-pm<br>
<<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a>> написал:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Коллеги, столкнулся с тем что код такого вида , используемый для поиска<br>
свободных ip v4 адресов на размерах 500-1000 элементов отрабатывается под 5<br>
секунд версия с map :<br>
<br>
my %ips = map { $_ => 1 } @ips;<br>
if (not exists($ips{$iponly} ))<br>
{<br>
         return $iponly;<br>
}<br>
<br>
<br>
  и с grep(sic!) ~2 секунду :<br>
<br>
if ( ! ( grep {$iponly eq $_ } @ips ) )<br>
# spent 27.4ms making 814 calls to NetAddr::IP::Lite::broadcast, avg<br>
34µs/call<br>
# spent 9.56ms making 814 calls to<br>
NetAddr::IP::Lite::__ANON__[Ne<wbr>tAddr/IP/Lite.pm:268], avg 12µs/call<br>
{<br>
     return $iponly;<br>
}<br>
<br>
Еще трабла в том что легендарный List::Util отдает быстро но почему не тот<br>
же результат( пробовал first , none ) что и grep?<br>
<br>
коллеги это нормально на более-менее среднем сервачке ?<br>
<br>
<br>
--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
<br>
</blockquote></blockquote>
<br>
-- <br>
 <br>
-- <br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br></div>