Достаточно просто, я хотел бы разделить данный IP-адрес на netid (как определено сетевой маской) и hostid на Perl. Пример:Perl: Разделить IP-адрес на hostid и netid
$network = NetAddr::IP->new('192.168.255.255/29') || die "invalid space $_";
Теперь $network->mask
возвращается 255.255.255.248
. Но нет методов в NetAddr::IP, чтобы применить маску для разбиения адреса на его части netid и hostid в пространстве /29
.
NetAddr::IP::Util упоминает операторов, чтобы сделать это, но документация - это беспорядок.
По крайней мере NetID могут быть извлечены с помощью Net::NetMask:
$netid = Net::Netmask->new('192.168.255.255/29')->base;
Это дает 192.168.255.248
. Опять же, нет способа получить часть хоста 0.0.0.7
. Лучше всего было бы упаковать/распаковать IP-адреса на 32-битный int, а затем просто &
их. Тогда было бы проще печатать двоичные представления IP-адресов, которые, как я нашел, могут быть действительно полезны для целей отладки и документирования.
Почему вы хотите '0.0.0.7'()? Похож на проблему XY – ikegami
Это не так. Метод извлечения hostid просто отсутствует и может быть доступен где-то еще в Perl. 'NetAddr :: IP :: Util' выглядит многообещающим, но не знаю, как использовать его для этой цели. –
Это не отвечает на мой вопрос. – ikegami