+ # at this point we should have two or three parts
+ # if it is three parts then join the first and last parts together
+ # to get an answer
+
+ # first deal with prefix/x00xx/single letter things
+ if (@parts == 3 && length $parts[0] <= length $parts[1]) {
+ @nout = matchprefix($parts[0]);
+ if (@nout) {
+ my $s = join('/', $nout[0], $parts[2]);
+ my @try = get($s);
+ if (@try && $try[0] eq $s) {
+ dbg("got 3 part prefix: $call $s") if isdbg('prefix');
+ $misses++;
+ $lru->put($call, \@try);
+ push @out, @try;
+ next;
+ }
+
+ # if the second part is a callsign and the last part is one letter
+ if (is_callsign($parts[1]) && length $parts[2] == 1) {
+ pop @parts;
+ }
+ }
+ }
+
+ # if it is a two parter
+ if (@parts == 2) {
+
+ # try it as it is as compound, taking the first part as the prefix
+ @nout = matchprefix($parts[0]);
+ if (@nout) {
+ my $s = join('/', $nout[0], $parts[1]);
+ my @try = get($s);
+ if (@try && $try[0] eq $s) {
+ dbg("got 2 part prefix: $call $s") if isdbg('prefix');
+ $misses++;
+ $lru->put($call, \@try);
+ push @out, @try;
+ next;
+ }
+ }
+ }
+
+ # remove the problematic /J suffix
+ pop @parts if @parts > 1 && $parts[$#parts] eq 'J';
+
+ # single parter
+ if (@parts == 1) {
+ @nout = matchprefix($parts[0]);
+ if (@nout) {
+ dbg("got prefix: $call = $nout[0]") if isdbg('prefix');
+ $misses++;
+ $lru->put($call, \@nout);
+ push @out, @nout;
+ next;
+ }