Могу ли я использовать v-строки для адресов IPv4? - PullRequest
3 голосов
/ 23 ноября 2010

Книга верблюдов предполагает, что V-строки могут использоваться для представления адресов IPv4:

$ipaddr = 204.148.40.9;   # the IPv4 address of oreilly.com

Но perldata по теме состояния строк версии:

Обратите внимание, что использование v-строк для адресов IPv4 не переносимо, если вы также не используете подпрограммы inet_aton () / inet_ntoa () пакета Socket.

У меня два вопроса:

1) Почему использование v-строк непереносимо?
2) Что такое «стандартный» способ преобразования ip-адреса из точечной нотации в целое число?Кажется, что unpack "N", <v-string> может иногда вызывать проблемы.

1 Ответ

5 голосов
/ 23 ноября 2010

«Стандартный» способ получить закодированную форму - inet_aton, который обрабатывает точечные IP-адреса и имена хостов - но для чего он вам нужен?Чаще всего лучшей идеей является просто пропустить все низкоуровневые интерфейсы, которые имеют дело с такими вещами, и использовать, например, IO :: Socket.

Если вы хотите преобразовать в целое число , как вы говорите, а не в той форме, которую ожидают функции сокетов (они похожи в C, но не так в Perl), тогда вы можете пойти дальше и просто использовать pack, пока вынепротиворечивы - часть, которая не переносима, является форматом, который принимают функции сокета.Например, unpack "N", pack "C4", split /\./, "1.2.3.4" даст вам хорошее беззнаковое представление с прямым порядком байтов этого адреса (в виде числа 16909060 == 0x01020304).

...