pack ('C4 ", $ цифры) в Perl - PullRequest
       3

pack ('C4 ", $ цифры) в Perl

0 голосов
/ 12 июня 2011

При написании CGI-приложений на Perl используйте следующий код для входа посетителей.

(my $digits = #ENV{'REMOTE_ADDR'}) =~ s/\.//g;
my $address = pack("C4", $digits);

в perldoc,

упаковка ШАБЛОН, СПИСОК

"C4" должен быть шаблоном. Что в действительности означает это?

Ответы [ 2 ]

7 голосов
/ 12 июня 2011

Ваш код выглядит как искаженный фрагмент кода для преобразования IP-адресов в формате с точками в квадрате в строку из четырех байтов, которую можно передать, например, в вызов socket.

Предполагая, что #ENV является ошибкой для $ENV, ваш код удаляет точки из точечного квадрата, давая вам строку из 4-12 цифр. Затем он (неявно) интерпретирует эти цифры как одно целое число, помещая его младшие 8 бит в первый байт результата и заполняя остальные нулями (поскольку pack предоставляет пустые значения для трех отсутствующих элементов списка, которые затем интерпретируется как нули).

Почему вы хотите напечатать двоичный IP-адрес в файл журнала, я не буду пытаться угадать. Но приведенный код близок к чепухе. Если вам нужен двоичный IP-адрес для чего-то, я рекомендую

use Socket 'inet_aton';
my $address = inet_aton($ENV{REMOTE_ADDR});
2 голосов
/ 12 июня 2011

Пожалуйста, прочитайте упомянутые вами документы pack.Шаблон для C:

C  An unsigned char (octet) value.

Таким образом, C4 - это четыре знака без знака.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...