use warnings; use strict; my $ports = '0xFFFBFF0000000000000000'; my $basePort = 1; my @ports; $ports = substr $ports, 2; while ($ports) { my $octet = hex substr $ports, 0, 2, ''; my $index = 0; while ($octet) { next unless $octet & 0x80; push @ports, $basePort + $index; } continue { ++$index; $octet = ($octet << 1) & 0xff; } $basePort += 8; } print join '.', @ports; #### 1.2.3.4.5.6.7.8.9.10.11.12.13.15.16.17.18.19.20.21.22.23.24