my @combs = ('A','T','G','C'); my $data; sub combine { my (@combs) = @_; my @newcombs = (); for my $item (@combs) { for my $item2 (@combs) { # dodii... my $tmp = "$item$item2"; push @newcombs, $tmp if ($data=~/$tmp/); } } return @newcombs; } sub prepare { open FILE, "; close FILE; } sub lookup { my (@combs) = @_; my %tmp; my @newcombs; map { @{$tmp{$_}} = ($data=~/$_/g); } @combs; for my $comb (keys %tmp) { push @newcombs, $comb if (@{$tmp{$comb}} > 0); } return @newcombs; } $| = 1; prepare; for my $i (1..5) { print STDERR "Iteration $i..." . @combs . " combine "; @combs = combine @combs; print STDERR @combs . " out "; ## look for combs #my @tmpcombs = lookup @combs; #print STDERR @tmpcombs . " out\n"; last unless(@combs); open OUTPUT, ">combs"; print OUTPUT join "\n", @combs; close OUTPUT; }