كل خط الانتاج يتكون من قائمة من الكلمات
هذه السطور لا بد من فرز باستخدام أبجدية يأمر يستخدم الفرعي السلسلة ابتداء من الكلمات الرئيسية. الكلمة يبدأ بعد العمود 50 ، لذلك نحن بحاجة إلى نوع خاص المساعد الروتينية التي يختار بها هذه السلاسل الفرعي. روتين نوع مشابه لما numeric_sort يتضح في وقت سابق. لأنه يعتمد على الاتفاقية ، قبل أن يتم استدعاء روتين ، فإن المتغيرات العالمية دولار ، ومبلغ (ب) وقد تم تعيين اثنين من عناصر البيانات (في خطوط هذا التقرير الحالة) التي يجب مقارنتها.
دون by_keystr (بلدي $ str1 = substr (دولار ، 50) ؛ بلدي $ str2 = substr ($ ب ، 50) ؛ إذا دولار (str1 لتر $ str2) (عودة -1 ؛) elsif (str1 مكافئ $ str2) ( عودة 0 ؛) والا (العودة 1 ؛))
ويتطلب هذا روتين المتغيرات المحلية لتخزين الفرعيين السلاسل. بيرل تصاريح الإعلان من المتغيرات ما يقتصر نطاقها على الجسم وظيفة (أو ، راقب إلى كتلة في الداخلية التي يتم الإعلان عنها). هذه المتغيرات المعلنة مع الكلمة بلدي ؛ هنا نوع الدالة المساعد اثنين من المتغيرات المحلية وstr1 $ $ str2. تحتوي هذه الفرعي سلاسل موقف ابتداء من الساعة 50 من سطرين ولدت. ولتر والمقارنات مكافئ القيام به بشأن هذه السلاسل يمكن تبسيطها باستخدام مشغل أدلرشتاين بيرل (وهو إصدار سلسلة من المشغل المذكور في سياق مساعد رقمي نوع الوظيفة). الجسم الرئيسي للحلقة ، بينما يعمل عن طريق تقسيم سطر الإدخال في قائمة من الكلمات ومن ثم معالجة هذه القائمة.
بينما ($ عنوان = ) (اقضم بصوت عالي ($ اللقب) ؛ العنوان @ = الانقسام / / ، $ عنوان ؛ foreach... ط دولار (0.. $ # العنوان) ($ = $ العنوان كلمة [$ ط] ؛... ))
يجب أن تكون كل كلمة اختبار لتحديد ما اذا كان من كلمة رئيسية. ويمكن القيام بذلك باستخدام بسيط المباراة التعبير العادية. هذا النمط في التعبير العادي ينص على أن يجب أن يكون هناك العليا الحالة الرسالة في بداية السلسلة التي عقدت في $ كلمة : إذا دولار (كلمة = ~ / ^ [من الألف إلى الياء] /) (... و) = ~ المشغل بيرل التعبير العادية مطابقة المشغل ، وهذا يستخدم لاستدعاء المقارنة بين قيمة دولار الكلمة و/ ^ [من الألف إلى الياء] / النمط. إذا كانت الكلمة الحالية وتصنف على أنها الكلمة ، ثم عبارة معروضا يتم الجمع بين لتشكل سلسلة تبدأ ، والكلمة والكلمات الباقية مجتمعة على تشكيل سلسلة الغاية. يمكن أن تكون هذه السلاسل ثم معا لإحداث خط للناتج النهائي. يتحقق ذلك باستخدام وظيفة sprintf (نفس ذلك في مكتبة stdio جيم). الدالة sprintf بإنشاء سلسلة في الذاكرة ، وتعود هذه السلسلة كما نتيجته. مثل printf ، sprintf يأخذ شكل سلسلة وقائمة من الحجج. ويمكن أن خطوط الانتاج أظهرت أن يتم إنتاجها باستخدام العبارة :
$ سطر = sprintf "٪ 50s - 50s ٪ \ ن" ، وبدء دولار ، $ الغاية ؛
البرنامج الكامل هو :
#! / البيرة / بن / بيرل الفرعية by_keystr (بلدي $ str1 = substr (دولار ، 50) ؛ بلدي $ str2 = substr ($ ب ، 50) ؛ إذا دولار (str1 لتر $ str2) (عودة -1 ؛) elsif (str1 مكافئ $ str2) (عودة 0 ؛) والا (العودة 1 ؛)
@ = جمع) () ، بينما ($ عنوان = ) (اقضم بصوت عالي ($ اللقب) ؛ العنوان @ = الانقسام / / ، $ عنوان ؛ بدء دولار = "" ؛ foreach ط دولار (0.. $ # العنوان) ($ = $ العنوان كلمة [$ ط] ؛ إذا دولار (كلمة = ~ / ^ [من الألف إلى الياء] /) ($ نهاية = "" ؛ للدولار (ي = $ ط ؛ $ ي في بيرل ، وهناك دائما طريقة أخرى! طريقة أخرى لبناء قائمة نهاية دولار سيستخدم بيرل انضمام الدالة :
$ نهاية انضمام = '' $ العنوان [ط دولار.. $ # العنوان] ؛
بيرل لانضمام وظيفة (وثقت في perlfunc) قد حجتان -- تعبير وقائمة. فهي تبني سلسلة من خلال الانضمام إلى سلاسل منفصلة للقائمة ، وقيمة التعبير يستخدم كعنصر فاصل. بيرل يأتي مع مكتبات عدة آلاف من الوظائف الفرعية ، غالبا ما تكون غالبية عملكم يمكن عمله باستخدام إجراءات القائمة. ومع ذلك ، سوف تحتاج إلى تعريف روتين الخاصة بك -- إذا كان ببساطة لترتيب الشفرة الخاصة بك ، وتجنب الإفراط كبيرة الرئيسي برامج سطر. بيرل إجراءات يتم تعريفها على النحو التالي :
دون اسم كتلة
روتين يحتوي على قيمة العائد ، وهذا هو إما قيمة البيان الأخير أعدم أو القيمة المحددة في بيان صريح العودة. الوسائط التي تم تمريرها إلى روتين هي مجتمعة في قائمة واحدة -- @ _. قد تكون الحجج فردية معزولة عن طريق الفهرسة في هذه القائمة ، أو باستخدام قائمة الحرفي باعتباره lvalue. كما هو موضح مع مساعد وظيفة الفرز في الجزء الأخير ، ويمكن تحديد الوظائف الفرعية الخاصة بهم نطاق المحلية variables.Many المزيد من التفاصيل عن الروتين الفرعي وترد في الجزء perlsub من الوثائق. قوسين تماما اختياري في المكالمات روتين :
Process_data ($ arg1 ، $ arg2 ، $ Arg3) ؛ هو نفس Process_data $ arg1 ، $ arg2 ، $ Arg3 ؛
وهناك تعريف لمثل هذا الروتين هو :
الفرعي ثماني (بلدي شارع = $ $ _ [0] ؛ بلدي $ رمز = 0 ؛ ل(بلدي دولار ط = 1 ؛ ط دولار ويمكن هذا روتين يمكن التذرع به :
$ شارع = "rwxr - س ---" ؛ $ accesscode ثماني = $ شارع ؛
لالمثال الثاني ، والنظر في روتين لتحديد ما إذا كانت سلسلة معينة موجودة في قائمة :
عضو (البند ، وقائمة) ؛
كما ذكر أعلاه ، فإن الحجج لالروتينية هي مجتمعة في قائمة واحدة ، بل يجب أن تكون يتشظى في الروتين. ويشمل التجهيز حلقة foreach أن يتحقق ما إذا كان عضو قائمة المقبل يساوي السلسلة المطلوب :
شبه عضو بلدي (($ الدخول ، @ قائمة) = @ _ ؛ # منفصلة الحجج foreach $ memb (@ قائمة) (اذا ($ $ دخول memb مكافئ) (إرجاع 1 ؛))
عودة 0 ؛)
في الواقع ، هناك طريقة اخرى. ليست هناك حاجة لابتكار روتين عضو لبيرل يملك بالفعل نسخة معممة في روتين البقرى. البقرى match_criterion datalist عند استخدامها في سياق القائمة ، البقرى تنتج شبه قائمة مع إشارات إلى أولئك الأعضاء في datalist التي ترضي الاختبار. عند استخدامها في سياق العددية ، وعودة البقرى وعدد من أعضاء datalist التي تلبي الاحتياجات.
مقال مقدم من خورخي مارتينيز
تنويه :موقعنا على الانترنت ليست مسؤولة عن محتوى هذه المادة. Webarticles هو حر للمعلومات.
المهم : هذه المادة "على كل خط انتاج يتألف من قائمة من الكلمات" وقد ترجم من قبل البرمجيات التلقائي. نشعر بالاسف من اجل أي الأخطاء الإملائية التي قد حدث. شكرا لتفهمكم.