my @in = ('1;foo', '2;bar', '3;baz', '4;foo', '0;baz;2');
my %saw;
my @out = grep(!$saw{$}++, map((split(';', $))[1], @in));
> > ok, map ersetzt schleife uns splittet @in in jeweils [1].
>
> Die map-Funktion geht alle Arrayelemente durch und wendet auf sie den Ausdruck an, im vorliegenden Falle split, also in der Tat wie eine Schleife. Die Klammer um split ermöglicht es dir, den gesuchten Teil (das Element mit der Indexnummer 1) direkt auszulesen. Das Ergebnis ist ein namenloses Array der gesuchten Teilelemente, auf welches dann grep angewendet wird.
Wobei das map nicht wirklich notwendig ist, im grep kannst du ebenfalls den split Ausdruck anwenden, das dürfte um einiges fixer gehen.
Ansonsten schöne Erklärung ;-)
Struppi.
--
[Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)