Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I came across this in a perl oneliners list:

perl -lne '$x{1,sort/./g}.=$_}{/./&& print for %x'
for finding anagram is a given word list.

How does it work?
The sort syntax is nothing like I have read.

Edit, BazB: formatted.

Replies are listed 'Best First'.
Re: sort syntax
by hardburn (Abbot) on Oct 16, 2003 at 18:16 UTC

    By default, sort will DWIM into simply sorting numerically and alphabetically. The little anagram checkers put each individual letter of a word into an array, and then sort that array. Here's the same basic algorithm in a little easier-to-follow form:

    my $check1 = 'OLDENBURG'; my $check2 = 'GRUBENDOL'; my @array1 = sort $check1 =~ /./g; my @array2 = sort $check2 =~ /./g; print @array1, "\n"; print @array2, "\n"; my $an1 = join '', @array1; my $an2 = join '', @array2; print "Is anagram: ", ( $an1 eq $an2 ? "Yes" : "No" ), "\n"; __OUTPUT__ BDEGLNORU BDEGLNORU Is anagram: Yes

    I'd also like to claim the first Quicksilver refererence in the Monastery. (Just hope I don't have to delete this bit when somebody points out it's wrong :)

    ----
    I wanted to explore how Perl's closures can be manipulated, and ended up creating an object system by accident.
    -- Schemer

    :(){ :|:&};:

    Note: All code is untested, unless otherwise stated

A reply falls below the community's threshold of quality. You may see it by logging in.