[NBLUG/talk] I hate perl. :-)

Chris Palmer chris at eff.org
Mon May 29 17:23:06 PDT 2006

William Tracy writes:

> Anyone who uses Perl for a program more than about fifty lines long
> needs to be slapped.

Ahh, but you can cram so much into those 50 lines!  ;)

Here is my version.  Apart from a few sanity checks (taint checking,
strict and warnings), an expanded command line syntax, and adherence to
my personal style rules, I also added a cache argument so that
duplicates are not printed.

The obvious performance improvement is to turn the recursion into
iteration.  This version is very slow.

#!/usr/bin/perl -T

use strict;
use warnings;

unless (@ARGV) {
    print STDERR "Usage: $0 word [...]";

for my $wrd (@ARGV) {
    print "Anagrams of $wrd:\n";
    my %ngrms;
    anagrams('', $wrd, \%ngrms);
    print map { $_ . "\n" } sort keys %ngrms;

sub anagrams {
    my ($so_far, $remaining, $cache) = @_;

    if (length($remaining) > 0) {
        for (my $i = 0; $i < length($remaining); $i++) {
            anagrams($so_far . substr($remaining, $i, 1),
                     substr($remaining, 0, $i) . substr($remaining, $i + 1),
    } else {
        $cache->{$so_far} = defined;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://nblug.org/pipermail/talk/attachments/20060529/acc927aa/attachment.pgp

More information about the talk mailing list