use strict; use warnings; my @values = ( "05F9AD", "F4EC9E", "0005" ); foreach my $value (@values) { my $decval = hex($value); ($decval >= 0x800000) and $decval -= 0x1000000; printf "Hex value 0x%08lx = %ld (decimal)\n", $decval, $decval; } __END__ # Output: Hex value 0x0005f9ad = 391597 (decimal) Hex value 0xfff4ec9e = -725858 (decimal) Hex value 0x00000005 = 5 (decimal)