my @aDone = map { push @aPending, $_; my @aNormalized; while (scalar(@aPending)) { my $sPending = shift @aPending; my $sNormalized = normalize($sPending, [@aPending]); if (!defined($sNormalized)) { #not enough information to normalize yet #so put the token back into the pending list unshift @aPending, $sPending; last; } push @aNormalized, $sNormalized; } @aNormalized; #return all normalized tokens } @aUnNormalized;