PROCMAILSC(5)

الاسم
بروكميل سك - تقنية التسجيل الموزون لبروكميل

موجز
[*] w^x شرط

الوصف
بالإضافة إلى الشروط التقليدية الصحيحة أو الخاطئة التي يمكنك تحديدها في وصفة، يمكنك استخدام تقنية التسجيل الموزون لتقرير ما إذا كانت وصفة معينة تطابق أم لا. عند استخدام التسجيل الموزون في وصفة، يجب أن تكون النتيجة النهائية لتلك الوصفة موجبة لكي تطابق.

يمكن لشرط معين أن يساهم في النتيجة إذا خصصت له `وزناً' (w) و`أساً' (x). تفعل ذلك بوضع الشرط (على نفس السطر) مسبوقاً بـ:
    w^x
بينما كل من w وx هما أعداد حقيقية بين -2147483647.0 و2147483647.0 شاملة.

شروط التعبير المنتظم الموزون
في المرة الأولى التي يُعثر فيها على التعبير المنتظم، سيضيف w إلى النتيجة. في المرة الثانية التي يُعثر فيها عليه، سيضاف w*x. في المرة الثالثة التي يُعثر فيها عليه، سيضاف w*x*x. في المرة الرابعة سيضاف w*x*x*x. وهكذا دواليك.

يمكن وصف ذلك بالصيغة المختصرة التالية:

                         n
         n k-1 x - 1 w * Sum x = w * -------
        k=1 x - 1

يمثل إجمالي النتيجة المضافة لهذا الشرط إذا وُجدت n من المطابقات.

لاحظ أنه يمكن تمييز الحالات التالية:

x=0 فقط المطابقة الأولى ستساهم بـ w في النتيجة. أي مطابقات لاحقة يتم تجاهلها.

x=1 كل مطابقة ستساهم بنفس w في النتيجة. تنمو النتيجة خطياً مع عدد المطابقات الموجودة.

0<x<1
    كل مطابقة ستساهم في النتيجة أقل من السابقة. ستقترب النتيجة بشكل مقارب من قيمة معينة (انظر قسم ملاحظات أدناه).

1<x كل تطابق سيساهم في النتيجة أكثر من التطابق السابق. ستنمو النتيجة بشكل أسي.

x<0 يمكن استخدامه لتفضيل عدد فردي أو زوجي من التطابقات.

إذا كان التعبير النمطي منفيًا (أي يتطابق إذا لم يُعثر عليه)، فمن الواضح أن n يمكن أن يكون صفرًا أو واحدًا.

شروط البرنامج الموزونة
إذا أعاد البرنامج رمز خروج EXIT_SUCCESS (=0)، فإن النتيجة الإجمالية المضافة ستكون w. إذا أعاد أي رمز خروج آخر (يشير إلى الفشل)، فإن النتيجة الإجمالية المضافة ستكون x.

إذا تم نفي رمز خروج البرنامج، فسيتم اعتبار رمز الخروج كعدد افتراضي من التطابقات. ثم يتم حساب النتيجة المضافة كما لو كان تعبيرًا نمطيًا عاديًا مع n=`exitcode' من التطابقات.

شروط الطول الموزونة
إذا كان طول البريد الفعلي هو M فإن:

    * w^x > L

سينتج نتيجة إضافية قدرها:

               x
        / M \ w * | --- |
        \ L /

و:

    * w^x < L

سينتج نتيجة إضافية قدرها:

               x
        / L \ w * | --- |
        \ M /

في كلتا الحالتين، إذا كان L=M، فسيضيف ذلك w إلى النتيجة. في الحالة الأولى، سيتم تفضيل الرسائل الأكبر، بينما في الحالة الثانية، سيتم تفضيل الرسائل الأصغر. على الرغم من إمكانية تغيير x لضبط حدة الدالة، فإن الاستخدام النموذجي يحدد x=1.

متنوعات
يمكنك الاستعلام عن النتيجة النهائية لجميع الشروط في وصفة من متغير البيئة $=. يتم تعيين هذا المتغير في كل مرة بعد أن يحلل procmail جميع الشروط في وصفة (حتى لو لم يتم تنفيذ الوصفة).

أمثلة
الوصفة التالية ستتخلص من جميع الرسائل التي تحتوي على أكثر من 150 سطرًا في النص. تحتوي الحالة الأولى على تعبير نمطي فارغ، وبما أنه يتطابق دائمًا، يُستخدم لإعطاء نتيجتنا إزاحة سالبة. ثم تطابق الحالة الثانية كل سطر في البريد، وتستهلك الإزاحة السالبة السابقة التي أعطيناها (نقطة واحدة لكل سطر). في النهاية، ستكون النتيجة موجبة فقط إذا احتوى البريد على أكثر من 150 سطرًا.

    :0 Bh * -150^0 * 1^1 ^.*$ /dev/null

افترض أن لديك مجلد أولوية تقرأه دائمًا أولاً. تختار الوصفة التالية البريد ذا الأولوية وتضعه في هذا المجلد الخاص. الحالة الأولى هي حالة عادية، أي أنها لا تساهم في النتيجة، ولكن يجب استيفاؤها ببساطة. تصف الحالات الأخرى أشياء مثل: عادة ما يكون لدى جون وكلير شيء مهم ليقولاه، الاجتماعات عادة ما تكون مهمة، الردود مفضلة قليلاً، الرسائل حول إلفيس (هذا مجرد مثال :-) مفضلة (كلما زاد ذكره، زاد تفضيل البريد، لكن الحد الأقصى للنتيجة الإضافية بسبب إلفيس سيكون 4000، بغض النظر عن عدد مرات ذكره)، الأسطر المقتبسة الكثيرة غير مرغوب فيها، الرموز التعبيرية مقدرة (ستصل النتيجة لها إلى حد أقصى 3500)، هؤلاء الأشخاص الثلاثة عادة لا يرسلون رسائل مثيرة للاهتمام، يفضل أن تكون الرسائل صغيرة (على سبيل المثال، الرسائل بطول 2000 بايت ستحصل على -100، والرسائل بطول 4000 بايت ستحصل على -800). كما ترى، إذا أرسل بعض الأشخاص غير المثيرين للاهتمام بريدًا، فلا يزال لدى البريد فرصة للوصول إلى مجلد الأولوية، على سبيل المثال، إذا كان يتعلق باجتماع، أو إذا كان يحتوي على رمزين تعبيريين على الأقل.

    :0 HB * !^Precedence:.*(junk|bulk) * 2000^0 ^From:.*(john@home|claire@work) * 2000^0 ^Subject:.*meeting * 300^0 ^Subject:.*Re: * 1000^.75 elvis|presley * -100^1 ^> * 350^.9 :-\) * -500^0 ^From:.*(boss|jane|henry)@work * -100^3 > 2000 priority_folder

إذا كنت مشتركًا في قائمة بريدية، وتريد فقط قراءة رسائل الجودة، فإن الوصفات التالية قد تؤدي الغرض. أولاً، نتأكد من أن البريد قادم من القائمة البريدية. ثم نتحقق مما إذا كان من أشخاص معينين نقدر رأيهم، أو حول موضوع نريد معرفة كل شيء عنه. إذا كان كذلك، قم بإيداعه. بخلاف ذلك، تحقق مما إذا كانت نسبة الأسطر المقتبسة إلى الأسطر الأصلية لا تتجاوز 1:2. إذا تجاوزت ذلك، تخلص من البريد. كل ما نجا من الاختبار السابق، يُودع.

    :0 ^From mailinglist-request@some.where {
      :0:
      * ^(From:.*(paula|bill)|Subject:.*skiing)
      mailinglist

      :0 Bh
      * 20^1 ^>
      * -10^1 ^[^>]
      /dev/null

      :0:
      mailinglist }

لمزيد من الأمثلة، يجب أن تنظر في صفحة الدليل procmailex(5).

تحذيرات
لأن هذا يسرع البحث بمقدار عشرة أضعاف، فإن egrep الداخلي لـ procmail سيبحث دائمًا عن التطابق الأقصر في أقصى اليسار، إلا إذا كان يحدد ما سيُسند إلى MATCH، وفي هذه الحالة يبحث عن التطابق الأطول في أقصى اليسار. على سبيل المثال، بالنسبة للتطابق الأقصر في أقصى اليسار، بمفرده، التعبير النمطي:

.*  سيتطابق دائمًا مع سلسلة طولها صفر في نفس الموضع.

.+  سيتطابق دائمًا مع حرف واحد (باستثناء الأسطر الجديدة بالطبع).

انظر أيضًا
procmail(1), procmailrc(5), procmailex(5), sh(1), csh(1), egrep(1), grep(1),

العلل
إذا حددت، في شرط طول، قيمة x تسبب تجاوزًا، فإن procmail يكون تحت رحمة دالة pow(3) في مكتبتك الرياضية.

الأعداد العشرية بصيغة `الهندسة' (مثل 12e5) غير مقبولة.

متنوعات
بمجرد الوصول إلى `زائد اللانهاية' (2147483647)، سيتم تخطي أي شروط موزونة لاحقة ببساطة.

بمجرد الوصول إلى `ناقص اللانهاية' (-2147483647)، سيُعتبر الشرط `لا تطابق' وستنتهي الوصفة مبكرًا.

ملاحظات
إذا كان في صيغة موزونة بتعبير نمطي 0<x<1، فإن النتيجة الإجمالية المضافة لهذا الشرط ستقترب تقاربًا:

       w -------
     1 - x

للوصول إلى نصف القيمة القصوى تحتاج

         - ln 2 n = --------
           ln x

مطابقات.

المؤلفون
ستيفن ر. فان دن بيرج
    <srb@cuci.nl>
Philip A. Guenther
    <guenther@sendmail.com>

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.