I am pretty sure, it does return. This routine (called "manal" in the system) is burried deep within a machine translation engine, I have here some log that visualizes the behaviour. The L1/L2 is a level counter I have installed to make sure I see when a level is entered and when exited.:
sub manal {
my $htree = shift;
my $rul = shift;
my $level = shift || 1;
my $hist = (split /\n/, $htree->data)[0];
my $str = (split /\|/, $hist)[0];
my ($k, $v);
$hist = "|$hist";
&log("entering manal L$level with history: $hist\n");
while(($k,$v) = each %$rul) {
my @out = @{&proccode($str,$v)}
for my $h (@out) {
&log("debug: (out: @out - $h)/$str/$hist/$k\n");
&manal($htree->append("$h$hist\n$k"),$rul,$level+1) if($hist !~
+/\|$h\|/);
}
}
&log("exiting manal L$level for STR: $str\n");
}
| [reply] [d/l] |