my @aDone; foreach (@aUnNormalized) { 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 unshift @aPending, $sPending; last; } push @aDone, $sNormalized; } }