Moin, * David Haller wrote (2007-01-10 05:49): >Am Die, 09 Jan 2007, Thorsten Haude schrieb: >>* Jochen Schulz wrote (2007-01-09 20:47): >[procmail] >>>BTW, welche Alternative empfiehlst Du denn? >> >>Ich benutze Maildrop, das kann mehr und hat lesbare Syntax. Es ist >>angeblich ein wenig langsamer, das interessiert mich aber erst, wenn >>ich schneller Mails bekomme als Maildrop sie wegsortieren kann. >[..] >>Ein einfaches Beispiel: Ich will alle reinen HTML-Mails in den >>Spamordner packen, außer solchen, die von Web.de kommen: >>if (/^Content-Type:[:space:]*text\/html/ && ! /From:.*web.de/) > ^^^^^^^^^ Bist du sicher, daß das so korrekt ist? Ich bin sicher, daß das so in meinem Filter steht und daß HTML-Mails aussortiert werden. Ist aber wie gesagt historisch, neue Versionen von Maildrop sprechen PCRE. >Ein einfaches Beispiel (procmail): > >:0 >* ^Content-Type:[[:space:]]*text\/html >* !^From:.*web.de >spambox > >Kann es sein, daß du nie 'man procmailex' gelesen hast? Mein Beispiel war nicht so gewählt, daß es von Procmail nicht erfüllt werden kann, sondern als Beispiel dafür, wie einfach die Sprache zu lesen ist. Ich habe Procmail ein oder zwei Jahre benutzt, als ich noch nicht wußte, daß es Alternativen gibt. (Wenn ich mich recht erinnere war CrossSecretary noch schlimmer.) Aber bitte, hier noch ein Beispiel, bitte übersetze das doch mal nach Procmail (auch fast identisch so im Einsatz, es fehlt nur das Aussortieren von falschen Unsubscribes): - - - Schnipp - - - gdbmopen("/home/yooden/.mutt/lists.db") foreach /^(To|Cc): .*/ { foreach (getaddr($MATCH)) =~ /.+/ { listbox = gdbmfetch(tolower($MATCH)) if ($listbox ne "") { to $MAILDIR/ML/$listbox } } } gdbmclose - - - Schnapp - - - >:0 >* BEDINGUNG >{ > ... >} > >Man lese ':0' einfach als 'if'. Und '*' als "AND" ;) 1. Mir fällt nichts Neues mehr dazu ein, daß hier einerseits eine so offensichtlich abwegige Sprache verwendet wird (das muß man sich mal auf der Zunge zergehen lassen: "Man lese ':0' einfach als 'if'."), andererseits diese aber als beste Erfindung seit Brot in Scheiben verteidigt wird. Ich programmiere seit Jahren mit viel Spaß in C, würde aber niemals auf die Idee kommen, C als einfache Sprache zu bezeichnen. Im Gegenteil, Anfänger sollten C lernen, damit sie das Schlimmste hinter sich haben. 2. Klar, und es liegt ja auf der Hand, daß ein if mit einem Doppelpunkt auf ein lokales Lockfile hinweist. if: (condition) { # Mach was } Ist das jetzt wichtig? Kann man das Beispiel trotzdem auch in Procmail verstehen? Klar, aber darüberhinaus ist es eben eine gänzlich eigene Denkweise, die einem nirgendwo sonst begegnet. Hier oder in der SuSE-Liste hatte mal jemand eine Regel, die etwa so aussah: :1 * cond1 mailbox Einige wunderten sich darüber, wie man auf die (in ihren Augen abwegige) Idee kommen kann, dort eine 1 hinzusetzen. Ich konnte das halbwegs nachvollziehen: Wenn man ein Problem hat, versucht man halt ein paar Sachen aus, und dabei eine Ziffer zu erhöhen, liegt nahe (es könnte ja ein Wahrheitswert sein!). Was der Nutzer nicht bedacht hat ist, daß die 0 bei Procmail keine Ziffer ist, sondern eben die Hälfte von etwas, was beinahe (aber nicht ganz) völlig anders als ein if funktioniert. Man kann Procmail lernen und sinnvoll einsetzen, durch die bizarre Syntax sind aber Lernkosten höher als bei Maildrop, gleichzeitig ist die Funktionalität eingeschränkt. Warum also? >Nur "OR" ist doof implementiert. Dafür bietet das "scoring" (=> 'man >procmailsc') gleich eine ungleich flexiblere Lösung. Wie wär's mit Assembler als Mailfilter? Ok, ist alles doof implementiert, dafür bietet es eine ungleich flexiblere Lösung. Oder anders ausgedrückt: Mit Maildrop benutze ich Scoring, wenn ich scoren will. Für logisches Oder verwende ich ein logisches Oder. Das macht die Sprache einfach, weil die Konzepte der Sprache sich mit den Konzepten des Problems decken und ich darum nicht von Sprache vom Problem abgelenkt werde. Thorsten -- A witty saying proves nothing. - Voltair
Attachment:
pgpyzAZ3_J3kK.pgp
Description: PGP signature