# # This software is Copyright 2005 by Elsevier Inc. You may use it # under the terms of the license at http://perl.plover.com/hop/LICENSE.txt . # ### ### make_genes ### ## Chapter 4 section 3.2 sub make_genes { my $pat = shift; my @tokens = split /[()]/, $pat; for (my $i = 1; $i < @tokens; $i += 2) { $tokens[$i] = [0, split(//, $tokens[$i])]; } my $FINISHED = 0; return Iterator { return if $FINISHED; my $finished_incrementing = 0; my $result = ""; for my $token (@tokens) { if (ref $token eq "") { # plain string $result .= $token; } else { # wildcard my ($n, @c) = @$token; $result .= $c[$n]; unless ($finished_incrementing) { if ($n == $#c) { $token->[0] = 0 } else { $token->[0]++; $finished_incrementing = 1 } } } } $FINISHED = 1 unless $finished_incrementing; return $result; } }