<?xml version="1.0" encoding="windows-1252"?>
<node id="991310" title="Re: Is it possible to generate all possible combinations of 2-letter and 3-letter words in perl?" created="2012-09-02 13:31:18" updated="2012-09-02 13:31:18">
<type id="11">
note</type>
<author id="968231">
Athanasius</author>
<data>
<field name="doctext">
&lt;p&gt;Although &lt;tt&gt;glob&lt;/tt&gt; performs well for small word sizes, for larger sizes a hand-rolled loop is much faster:&lt;/p&gt;

&lt;code&gt;
#! perl
use strict;
use warnings;
use Benchmark qw(cmpthese);

cmpthese(1, {
    'loop' =&gt; sub { my @p = permute_loop(10); print 'loop: ', scalar @p, "\n"; },
    'glob' =&gt; sub { my @q = permute_glob(10); print 'glob: ', scalar @q, "\n"; },
});

sub permute_glob
{
    my ($size) = @_;
    my  $r     = 'A,T,G,C';

    return glob "{$r}" x $size;
}

sub permute_loop
{
    my ($size) = @_;
    my  @a     = qw(A T G C);

    while (--$size)
    {
        @a = map { $_ . 'A', $_ . 'T', $_ . 'G', $_ . 'C' } @a;
    }

    return @a;
}
&lt;/code&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;code&gt;
glob: 1048576
            (warning: too few iterations for a reliable count)
loop: 1048576
            (warning: too few iterations for a reliable count)
     s/iter  glob  loop
glob    281    --  -98%
loop   4.60 6011%    --
&lt;/code&gt;

&lt;p&gt;Hope that helps,&lt;/p&gt;

&lt;!-- Node text goes above. Div tags should contain sig only --&gt;
&lt;div class="pmsig"&gt;&lt;div class="pmsig-968231"&gt;
&lt;p&gt;Athanasius&amp;emsp;&lt;font color=#008000&gt;&amp;lt;&amp;deg;(((&amp;gt;&amp;lt;&lt;/font&gt;&amp;emsp;&lt;i&gt;contra mundum&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</field>
<field name="root_node">
991276</field>
<field name="parent_node">
991276</field>
</data>
</node>
