sub decode_COMP3 { my $digits = unpack "H*", $_[0]; #warn "COMP-3: $digits\n" if $digits =~ m!^0?404040!; if( $digits =~ m!^(?:40)+(?:00|f0)*$!i ) { warn "Invalid (space) content for field detected: $digits."; $digits=~ s![4f]0!00!g; } elsif( $digits =~ /[abcdef]\d/ ) { my $old= $digits; $digits=~ s![a-f]!0!g; warn "Invalid number/misaligned content for field detected [$old] -> [$digits]."; }; my $sign = chop $digits; if ($sign eq 'D' or $sign eq 'd') { $sign = '-' } elsif ($sign eq 'C' or $sign eq 'c') { $sign = '+' } elsif ($sign eq 'F' or $sign eq 'f') { $sign = ' ' } elsif ($sign =~ /^\d+$/) { $digits .= $sign; $sign = '' } else { $digits .= $sign; $sign = '?' }; "$sign$digits" };