Fuer jedes Listenelement wird ein Element im Hash saw mit dem Wert 1 angelegt (denn undef()+1 ist 1). Das Konstrukt gibt aber trotzdem undefined zurueck, da die Inkrementierung erst nach dem Bilden des Return-Wertes durchgefuehrt wird (weil ++ hinten steht und nicht vorn). Also gibt die Hash-Abfrage (ohne !) undefined zurueck, wenn ein Element noch nicht gesichtet wurde, wodurch wegen ! eine 1 entsteht und grep() dieses Listenelement outputtet. Beim naechsten Auftreten desselben Listen-Elements wird das zugehoerige Hash-Element auf 2 erhoeht, nicht jedoch bevor die bereits drinstehende 1 mit ! in false umgewandelt wird und das Listenelement demnach von grep() nicht mehr ausgeworfen wird. Eigentlich ziemlich genial, dieses kleine Stueckchen Code. Aber das ist eben Perl! Da kannste Sachen in einer Zeile machen, fuer die Du woanders ne ganze Seite schreiben musst.
Calocybe
Auf jeden Fall, habe ich dieses Posting in das Verzeichnis "/perl/wissen_pur" kopiert. ;-)
bye
slobo