shift
извлекает первый аргумент функции из списка переданных аргументов
pack("N", shift)
возвращает 32-битное сетевое представление порядка байтов этого значения
my $str = unpack("B32", pack("N", shift));
хранит представление цепочки битов (значение 32 бита) указанного значения (то есть строку, которая выглядит как "00010011").
substr
содержит ошибки и должно быть substr($str, 16);
, чтобы получить последние 16 символов из вышеперечисленного. (или substr($str, 16, 16);
.)