[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;