Модуль Devel :: Peek (который поставляется с Perl) позволяет проверить представление переменной в Perl.Это, вероятно, более полезно, чем просто необработанный print
, когда вы имеете дело с двоичными данными, а не с печатаемыми символьными строками.
#!/usr/bin/perl
use strict;
use warnings;
use Devel::Peek qw(Dump);
my $bits = pack 'N','134744072';
Dump($bits);
, который выдает такой результат:
SV = PV(0xaedb20) at 0xb15650
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0xb06630 "\10\10\10\10"\0
CUR = 4
LEN = 10
«SV» в начале указывает, что это дамп «скалярного значения» (в отличие от массива или хеш-значения).
«SV = PV» указывает, что этот скаляр содержитстрока байтов (в отличие от целочисленного значения или значения с плавающей запятой).
'PV = 0xb06630' - указатель на то, где расположены эти байты.
"\ 10 \ 10\ 10 \ 10 "\ 0, вероятно, тот бит, который вас интересует. Строка в двойных кавычках представляет байты, составляющие содержимое этой строки.Внутри строки вы обычно видите, что байты интерпретируются так, как если бы они были ASCII, поэтому десятичный байт 65 будет выглядеть как «A».Все непечатаемые символы отображаются в восьмеричном виде с предшествующим \
.
Таким образом, ваша переменная $bits
содержит 4 байта, каждый восьмеричный '10' имеет шестнадцатеричное значение 0x08.
LENи CUR сообщают вам, что Perl выделил 10 байт памяти и в настоящее время использует 4 из них (поэтому length($bits)
вернет 4).