[Dresden-pm] Perl Mongers erhebet euch

A. Pagaltzis pagaltzis at gmx.de
Fre Jan 27 21:22:46 PST 2006


* Steffen Schwigon <schwigon at webit.de> [2006-01-28 04:50]:
>So, hier endlich meine Beiträge.

Vom Ansatz nett!

Allerdings führt dein Misbrauch von `map` zu massig überflüssig
wiederholten Matches und verringert die Lesbarkeit damit enorm.
Du willst `while`, um `m//g` in skalarem Kontext ausführen zu
können, sodass du den Gesamtmatch und die Untermatches sauber
trennen kannst.

[ Wir unterbrechen das Programm für einen kurzen Meta-Hinweis:
  du hast die Mail an dresden-pm at pm.org geschickt und an
  dresden-pm at mail.pm.org gemoppelt. ]

Ausserdem ist bei Ausgeben dein geschachteltes `join`
überflüssig: wenn du aus dem `map` einfach die Elemente
hochreichst, wird das äussere `join` sie kommentarlos identisch
zusammenbauen.

Meine Formulierung desselben Ansatzes:

    use strict;
    use warnings;

    my $cmd = shift @ARGV;

    my $key =
        $cmd eq 'user'   ? \$2 :
        $cmd eq 'server' ? \$3 :
        $cmd eq 'tld'    ? \$4 :
        die "Unknown sort key: $cmd\n";

    $_ = do { local $/; <> };

    my %mail;

    push @{ $mail{ $$key } }, $1
        while /((\w[^@ ]*)@([\w.]*\.(\w+)))/g;

    print(
        map "$_\n",
        map @{ $mail{ $_ } },
        sort keys %mail
    );

Gruss,
-- 
#Aristoteles
*AUTOLOAD=*_;sub _{s/(.*)::(.*)/print$2,(",$\/"," ")[defined wantarray]/e;$1};
&Just->another->Perl->hacker;