У тебя может быть overload в нескольких местах: 1) В массиве @ips 2) while( $ipn < $ipn->broadcast ) --- вызов метода + overload 3) my $iponly = (split '/', $ipn++)[0]; #get --- overload в чистом виде + преобразование в строку.
25 ноября 2016 г., 14:38 пользователь Naim Sh via Moscow-pm < [email protected]> написал: > Оки и какой вариант быстрее того же map будет . > код имеет такой вид ( точнее его кусок который больше всего времени и ест ) > > массив @ips имеет стандартные ipv4 адреса типа 10.56.6.2, 10.135.8.23 , > 10.135.22.43 и тд и тп . > > my $ipn = NetAddr::IP->new("$first_ip/$netmask"); > > while( $ipn < $ipn->broadcast ) > { > my $iponly = (split '/', $ipn++)[0]; #get > > if ( ! ( grep {$iponly eq $_} @ips ) ) > { > return $iponly; > } > > } > > first отдает не то что мне нужно из под этой сети адрес в данном случае > 10.135.x.y а 10.56.x.y хотя да он первый пустой, но grep выдает то что > нужно. > > Вроде tie переменных и т.д нету > > > > On 11/25/2016 03:29 PM, Sergey Aleynikov via Moscow-pm wrote: > >> Добрый день, >> >> map будет быстрее только если поисков по одному и тому же исходному >> массиву @ips будет несколько - т.к. операция построения хэша дорогая. >> Одноразовый поиск - греп быстрее. first возвращает другое (по смыслу) >> значение, чем греп (элемент, а не количество), но логически для этой >> задачи разницы быть не должно. >> >> PS: my %ips; @ips{@ips} = (); быстрее, чем my %ips = map { $_ => 1 } >> @ips; >> >> Best regards, >> Sergey Aleynikov >> >> >> 25 ноября 2016 г., 14:00 пользователь Naim Sh via Moscow-pm >> <[email protected]> написал: >> >>> Коллеги, столкнулся с тем что код такого вида , используемый для поиска >>> свободных ip v4 адресов на размерах 500-1000 элементов отрабатывается >>> под 5 >>> секунд версия с map : >>> >>> my %ips = map { $_ => 1 } @ips; >>> if (not exists($ips{$iponly} )) >>> { >>> return $iponly; >>> } >>> >>> >>> и с grep(sic!) ~2 секунду : >>> >>> if ( ! ( grep {$iponly eq $_ } @ips ) ) >>> # spent 27.4ms making 814 calls to NetAddr::IP::Lite::broadcast, avg >>> 34µs/call >>> # spent 9.56ms making 814 calls to >>> NetAddr::IP::Lite::__ANON__[NetAddr/IP/Lite.pm:268], avg 12µs/call >>> { >>> return $iponly; >>> } >>> >>> Еще трабла в том что легендарный List::Util отдает быстро но почему не >>> тот >>> же результат( пробовал first , none ) что и grep? >>> >>> коллеги это нормально на более-менее среднем сервачке ? >>> >>> >>> -- >>> Moscow.pm mailing list >>> [email protected] | http://moscow.pm.org >>> >>> > -- > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org >
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
