[Dresden-pm] Perl Mongers erhebet euch
Steffen Schwigon
schwigon at webit.de
Fre Jan 27 19:44:34 PST 2006
Steffen Liebergeld <stepardo at gmail.com> writes:
> Hier ist auch schon die erste Programmieraufgabe:
> Zu entwickeln ist eine Methode, welche aus einer gegebenen Textdatei
> ohne Struktur[1] alle E-Mailadressen extrahiert, diese auf Wunsch
> nach Servern, Top-Level Domains oder Username sortiert und das
> Ergebnis zurückgibt.
So, hier endlich meine Beiträge.
Der erste Cmdline-Param ist die gewünschte Sortierung.
Input sind die nächsten Params als Filenamen oder STDIN.
Da E-Mail-Adressen eh' nicht mit Regular Expressions parsebar sind,
verwende ich vereinfacht nur das genügend dicht um '@' stehende Zeug.
Variante 1, ohne "use strict":
------------------------------
$cmd = shift;
$/ = undef; $in = <>;
$re = qr/((\w[^@ ]*)@([\w.]*\.(\w+)))/;
map {
push @{$res{$2}}, $1 if (/$re/ and $cmd eq 'user');
push @{$res{$3}}, $1 if (/$re/ and $cmd eq 'server');
push @{$res{$4}}, $1 if (/$re/ and $cmd eq 'tld');
} $in =~ /$re/g;
print join("\n",
map {
join("\n", @{$res{$_}});
} sort keys %res), "\n";
Variante 2, mit "use strict":
-----------------------------
use strict;
use warnings;
my $cmd = shift;
my $in;
{
local $/; $in = <>;
}
my $re = qr/((\w[^@ ]*)@([\w.]*\.(\w+)))/;
my %res;
map {
push @{$res{$2}}, $1 if (/$re/ and $cmd eq 'user');
push @{$res{$3}}, $1 if (/$re/ and $cmd eq 'server');
push @{$res{$4}}, $1 if (/$re/ and $cmd eq 'tld');
} $in =~ /$re/g;
print join("\n",
map {
join("\n", @{$res{$_}});
} sort keys %res), "\n";
GreetinX
Steffen
--
Steffen Schwigon <schwigon at webit.de>
Dresden Perl Mongers <http://dresden-pm.org/>