دروس بيرل: المتغير، المصفوفة، التجزئة مع مثال البرمجة

ما هي لغة بيرل؟

بيرل لغة برمجة ديناميكية عالية المستوى ومفسرة ومتعددة الأغراض. Perl هو مصطلح يشير إلى "Practical Extraction and Reporting Language" (لغة الاستخراج والتقارير العملية) على الرغم من عدم وجود اختصار لـ Perl. تم تقديمها بواسطة Larry Wall في عام 1987. تم تصميم لغة Perl خصيصًا لتحرير النصوص. ولكن الآن، يتم استخدامها على نطاق واسع لمجموعة متنوعة من الأغراض بما في ذلك إدارة نظام Linux وبرمجة الشبكات وتطوير الويب وما إلى ذلك.

نظرة عامة على لغات البرمجة

دعونا نضع الأمر بطريقة بسيطة. في حين أن أجهزة الكمبيوتر تفهم فقط 0 و1 (اللغة الثنائية/لغة الآلة/[لغة منخفضة المستوى])، فمن الصعب جدًا البرمجة بلغة ثنائية بالنسبة لنا نحن البشر. بيرل هي لغة برمجة تستخدم عناصر اللغة الطبيعية، والكلمات المستخدمة في اللغة الإنجليزية الشائعة، وبالتالي فهي أسهل للفهم من قبل البشر [لغة عالية المستوى]. الآن هناك مشكلة؛ لا تستطيع أجهزة الكمبيوتر فهم اللغات عالية المستوى، والتي يمكننا نحن البشر فهمها بسهولة. ولتحقيق ذلك، نحتاج إلى شيء يمكنه ترجمة اللغة عالية المستوى إلى لغة منخفضة المستوى. هنا يأتي المترجم لمساعدتنا. المترجم الفوري هو عبارة عن برنامج يقوم بتحويل البرنامج المكتوب باللغة عالية المستوى إلى لغة منخفضة المستوى حتى يتمكن الكمبيوتر من فهم وتنفيذ التعليمات المكتوبة في البرنامج. وبالتالي، بيرل هو لغة برمجة مترجمة.

أين يتم استخدام بيرل؟

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

يمكن أيضًا استخدام Perl لإنشاء الصور ومعالجتها. وبصرف النظر عن ذلك، فإن إنشاء الشبكات عبر telnet وFTP وما إلى ذلك وإنشاء واجهة المستخدم الرسومية والإلكترونيات VLSI وإنشاء مرشحات البريد الإلكتروني للحد من ممارسات البريد العشوائي هي بعض حالات استخدام Perl.

تشتهر لغة Perl أيضًا بتنفيذ ممارسات البرمجة الموجهة للكائنات (OOP) وتدعم جميع أشكال الميراث (البسيطة والمتعددة والماسية) والتعدد الأشكال والتغليف. تتمتع لغة Perl بالمرونة الكافية لدعم الممارسات الإجرائية والبرمجة الموجهة للكائنات في نفس الوقت. تحتوي لغة Perl أيضًا على وحدات إضافية تسمح لك بكتابة أو استخدام/إعادة استخدام التعليمات البرمجية المكتوبة بلغة البرمجة الموجهة للكائنات. Python، بي إتش بي، بي دي إل، تي سي إل، أوكتاف، Java، C ، C++و Basic و Ruby و Lua في برنامج Perl النصي الخاص بك. هذا يعني أنه يمكنك دمج لغة Perl مع هذه الإضافات لغات البرمجة بدلاً من إعادة كتابة التعليمات البرمجية الموجودة.

تطبيقات لغة البرمجة بيرل

تطبيقات لغة البرمجة بيرل

لماذا استخدام بيرل؟

صحيح أن هناك لغات برمجة أخرى يمكن استخدامها للقيام بكل الأشياء المذكورة أعلاه، فلماذا يجب عليك استخدام لغة Perl على وجه التحديد؟ من السهل جدًا تعلم لغة Perlوخاصة إذا كان لديك خلفية في برمجة الكمبيوتر. تم تصميم لغة Perl لتكون سهلة على البشر في الكتابة والفهم بدلاً من تسهيل معالجتها بواسطة أجهزة الكمبيوتر. ويستخدم التعبيرات العادية. يختلف أسلوبها الطبيعي في اللغة عن لغات البرمجة الأخرى التي تستخدم قواعد وتركيبات معينة؛ لذلك، فإن لغة Perl مرنة للغاية ولا تفرض عليك أي طريقة معينة للتفكير في حل أو مشكلة. لغة بيرل محمولة للغاية. يمكن تشغيله على أي نظام تشغيل مثبت عليه مفسّر Perl، لذا فهو مستقل عن النظام الأساسي. جميع أنظمة Linux Operaتأتي أنظمة ting مثبتة بلغة Perl، لذا يمكنك البدء في كتابة أكواد Perl في Linux فورًا. وهذا على عكس نصوص Shell، حيث يتغير الكود وفقًا لنوع توزيع Linux المستخدم، مما يجعله أقل قابلية للنقل. تصبح المهام الصغيرة المحددة في لغة Perl سهلة وسريعة للغاية. خلال هذا البرنامج التعليمي لـ Perl للمبتدئين، ستتعلم كيف يمكنك ترميز برامج صغيرة وسريعة لمهام محددة. لنأخذ مثالاً بسيطًا لبرنامج Hello World الكلاسيكي الذي يُستخدم لبدء تعلم أي لغة برمجة تعتمد على نظام UNIX:

مثال: بيرل مرحباً بالعالم

مثال بسيط لبيرل

#!/usr/bin/perl
print "Hello, world!";

الإخراج:

مرحبا العالم!

سيتم طباعة السطرين المذكورين أعلاه من التعليمات البرمجية مرحبًا بالعالم! الآن ألم يكن الأمر بسيطًا وسريعًا جدًا؟ الطلاب الذين لديهم معرفة C، C++ ستعرف أن الأمر يتطلب عددًا أكبر من أسطر التعليمات البرمجية للحصول على نفس المخرجات بهذه اللغات.

قد تتساءل لماذا لغة Perl مشهورة جدًا على الويب. الأمر بسيط حيث أن معظم الأشياء التي تحدث على الويب هي من نوع TEXT وPerl جيد جدًا في معالجة النصوص. إذا قارنا لغة Perl بأي من اللغات، فستكون لغة Perl هي اللغة الأفضل وهي جيدة في التعامل مع الملفات ومعالجة النصوص وإعداد التقارير عن المخرجات

واحدة من أفضل مزايا لغة Perl هي أنها كذلك مجانا للاستخدام

يعتقد مجتمع بيرل اعتقادًا راسخًا أن البرامج يجب أن تكون متاحة مجانًا وقابلة للتعديل والتوزيع مجانًا. يسعى العديد من المتطوعين من مجتمع بيرل إلى جعل لغة البرمجة جيدة قدر الإمكان.

مميزات وعيوب لغة بيرل

الايجابيات: سلبيات:

مزايا بيرل

عيوب بيرل

  • بالمقارنة مع لغات البرمجة الأخرى، تعد لغة Perl هي الأقوى في معالجة النصوص وتحليلها
  • هذه لغة مترجمة مع وقت تنفيذ سريع حيث ليست هناك حاجة لتجميع برنامج Perl النصي
  • بسيطة وسهلة البرمجة والفهم.
  • انها وجوه المنحى.
  • تسهل مكتبة CPAN تطوير Perl (سنتعلم المزيد عن هذا لاحقًا في هذا الموضوع).
  • تستخدم في تطوير الويب في الغالب لبوابات الدفع.
  • يستخدم في الأتمتة ولاختبار معظم الأشياء المتعلقة بالشبكة والتخزين.
  • هناك حد أدنى من دعم واجهة المستخدم الرسومية مقارنة بلغات البرمجة الأخرى.
  • يجب عليك الرجوع إلى وحدات المكتبة المعقدة والتي ليست سهلة الفهم (لا تخف بمجرد أن تعرف كيفية القيام بالأشياء، سيكون كل شيء سهلاً).
  • إن فهم الأنماط المعقدة يتطلب الخبرة.

هيا بنا نبدأ

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

تنزيل وتثبيت بيرل – Windowsوماك ولينكس

كيفية الحصول على بيرل؟

أخبار جيدة ربما لديك!

ولكن إذا لم تتمكن من العثور عليه بالفعل على نظامك، فلا يزال بإمكانك الحصول عليه مجانًا.

لمعرفة ما إذا كان Perl مثبتًا لديك بالفعل، انتقل إلى سطر الأوامر واكتب: perl -v

كيفية تنزيل بيرل

سيعرض الأمر إصدار Perl إذا كان مثبتًا. في هذه الحالة، الإصدار هو v5.14.2. ولكن إذا لم يكن الأمر كذلك... فلا داعي للذعر...

يونكسدروس PERL للمبتدئين - الدليل الكامل المثبتة بالفعل يأتي مثبتًا مسبقًا مع Perl على الرغم من أنك قد تحتاج إلى التحديث إلى الإصدار الأحدث.
نظام التشغيل Mac OS دروس PERL للمبتدئين - الدليل الكامل المثبتة بالفعل يأتي OSX مزودًا ببرنامج Perl المثبت مسبقًا، على الرغم من أنك قد تحتاج إلى تحديثه إلى الإصدار الأحدث
Windowsدروس PERL للمبتدئين - الدليل الكامل تحتاج إلى تثبيت يتوفر خياران

  1. Strawberry Perl هو توزيع ثنائي مفتوح المصدر لـ Perl لـ Windows نظام التشغيل. يتضمن مترجمًا ووحدات مثبتة مسبقًا توفر القدرة على تثبيت وحدات XS CPAN مباشرة من CPAN
  2. يوفر ActiveState perl توزيعًا ثنائيًا لـ Perl (للعديد من الأنظمة الأساسية)، بالإضافة إلى مدير حزم Perl الخاص بهم (PPM).

تحديث بيرل على نظام التشغيل Linux:

إذا كنت بحاجة إلى تحديث إصدار Perl، فما عليك سوى إدخال سطر واحد من الأوامر

سودو الرابطة بين الحصول على تثبيت بيرل

و استرخي. سيتم الاعتناء بالباقي. فقط تأكد من أن لديك اتصال إنترنت نشط.

قم بتحديث لغة PERL على نظام Linux

قم بتحديث لغة PERL على نظام Linux

تثبيت بيرل ل Windows:

أولاً، قم بتنزيل Active Perl من هذا الصفحة . اتبع هذه الخطوات لتثبيت ActivePerl Windows نظام. انظر لقطات أدناه لنفسه.

خطوة 1 بمجرد تنزيل برنامج التثبيت وبدء التثبيت، ستظهر لك النافذة أدناه، انقر فوق "التالي" للمتابعة.

كيفية تثبيت بيرل على Windows

خطوة 2 اقبل اتفاقية الترخيص لمتابعة التثبيت.

كيفية تثبيت بيرل على Windows

خطوة 3 فيما يلي الحزم المختلفة التي سيتم تثبيتها. افتراضيًا، سيتم تحديد الكل. الشيء الوحيد المختلف هو PPM (Perl Package Manager). هذه هي الأداة المساعدة التي يوفرها Active Perl لتثبيت وحدات أو مكتبات Perl الخارجية في نظامك. انقر على التالي للمتابعة.

تثبيت بيرل على Windows

خطوة 4 هذه أنواع مختلفة من امتدادات Perl التي يمكن استخدامها لـ Perl. في الغالب سنستخدم .Pl و.Plx و.Pm لـ Perl. تستخدم وحدات Perl بشكل أساسي .Pm كامتداد ملف خاص بها للإشارة إلى ملف المكتبة. حدد جميع الخيارات وانقر على زر التالي.

تثبيت بيرل على Windows

خطوة 5 انقر على زر التثبيت لمتابعة التثبيت.

تثبيت بيرل على Windows

خطوة 6 بمجرد التثبيت، قم بتنفيذ الأمر "Perl –v" للتحقق من تثبيت Perl بنجاح في نظامك.

تثبيت بيرل على Windows

هناك الكثير من الأشياء التي يجب مناقشتها لإعداد بيئة Perl في كل من Linux و Windows، حيث لن يكون هناك العديد من ملفات المكتبة المضمنة في هذا التثبيت. تحتاج إلى تثبيت تلك يدويًا. يمكنك تثبيتها يدويًا باستخدام CPAN(Comprehensive Perl Archiأو أي من ملفات PPM التي تعمل فقط مع نظام التشغيل Windows Perl. ولكن هذه الملفات ليست إلزامية لبدء الترميز بلغة Perl.

بصرف النظر عن إعداد Windows هذا، يمكنك استخدام Windows ميزة جديدة في نظام Linux الفرعي لنظام Windows 10 واستخدامها لتشغيل أكواد Perl

برنامج بيرل الأول

Hello world!

مثال بيرل: أهلاً بالعالم

#!/usr/bin/perl -w
#this is just a comment…
print "Hello World";

لا تقلق إذا كنت لا تفهم هذا النص. كل شيء سوف يكون واضحا قريبا. تعالوا وألقوا نظرة عليه سطرًا:

#!/usr/bin/perl		

هذا يخبر Operaيقوم النظام بتنفيذ هذا الملف باستخدام البرنامج الموجود في /usr/bin/Perl. لا تحتاج بعض بيئات التطوير المتكاملة إلى هذا السطر. إذا كان الأمر ضروريًا، فيجب عليك أن تكتب هنا طريقًا للوصول إلى مترجمك الشفهي. يتذكر! يجب أن يكون هذا السطر الخاص في بداية برنامجك ويجب أن يبدأ من #! استخدام التحذيرات. هذا أمر خاص آخر يطلب من المترجم عرض أي تحذيرات، على سبيل المثال -w الذي يقوم بتنشيط التحذيرات على مستوى العالم.

print "Hello World";		

تقوم تعليمات الطباعة بكتابة النص على الشاشة. تخبر الفاصلة المنقوطة في نهاية السطر مترجم Perl بأن التعليمات قد انتهت. يجب عليك وضع فاصلة منقوطة في نهاية كل تعليمات في كود Perl. لاحظ علامة الاقتباس ('). من الضروري لتعليم الطباعة. احفظ البرنامج النصي أعلاه باسم firstprog.pl

On Windows

إذا كان برنامج Strawberry مثبتًا لديك، فيمكنك ببساطة النقر فوق "تشغيل". يمكنك أيضًا تشغيل واجهة سطر الأوامر والكتابة على وحدة التحكم:

C:\> perl path\firstprog.pl		

أو إذا لم يكن perl.exe في المسار الخاص بك:

C:\> c:\perl\bin\perl.exe firstprog.pl		

على لينكس/يونكس

كل ما عليك فعله هو فتح Terminal وكتابة:

perl firstprog.pl		

إذا لم تتمكن من تشغيل البرنامج، فتأكد من أن لديك أهلية تشغيله. اكتب في المحطة:

chmod +x firstprog.pl		

أصبح برنامجك الآن قابلاً للتنفيذ وجاهزًا للتشغيل. للتنفيذ اكتب:

./firstprog		

تثبيت وحدات cpan ناقص

الوحدات النمطية عبارة عن مجموعة من التعليمات البرمجية التي تستخدم لأداء مهام تؤدي عمليات مشتركة في العديد من البرامج. إذا كنت تستخدم وحدات نمطية بلغة بيرل، فلن تضطر إلى إعادة كتابة التعليمات البرمجية لأداء نفس العملية. يمكن لـ بيرل الاستفادة من مثل هذه المكتبات الخارجية من التعليمات البرمجية. إحدى أفضل المكتبات هي CPAN. وهي اختصار لـ Comprehensive Perl Archiتحتوي شبكة CPAN على عدد هائل من وحدات Perl التي يمكنك استخدامها. إنها عبارة عن مجتمع أو شبكة تضم عددًا كبيرًا من المطورين الذين يساهمون في مثل هذه الوحدات. من خلال تثبيت دعم وحدات CPAN في وحدة Perl الخاصة بك، يمكنك الاستفادة من وحدات CPAN وتسهيل عملك. تتم كتابة معظم وحدات Perl بلغة Perl، ويستخدم بعضها XS (وهي مكتوبة بلغة C) لذا تتطلب مُجمِّع C (من السهل الحصول على هذا الإعداد - لا داعي للذعر. قد تعتمد الوحدات على وحدات أخرى (دائمًا تقريبًا على CPAN) ولا يمكن تثبيتها بدونها (أو بدون إصدار محدد منها). يجدر بك قراءة الوثائق بعناية لمعرفة الخيارات أدناه. تتطلب العديد من الوحدات على CPAN الآن إصدارًا حديثًا من Perl (الإصدار 5.8 أو أعلى). قم بتثبيت cpanminus باستخدام نص برمجي للحصول على وحدات CPAN وفك ضغطها وبنائها وتثبيتها لتسهيل تثبيت وحدات أخرى (ستشكرنا لاحقًا). لتثبيت التطبيق cpanminus وحدات بيرل، في نوع سطر الأوامر:

cpan App::cpanminus

تطبيق cpan::cpanminus تأكد من أن لديك اتصال بالإنترنت أثناء تنزيل وحدات Perl وتثبيتها.

تثبيت وحدات cpan ناقص

الآن قم بتثبيت أي وحدة:

cpan –i <Module_Name>.		

دعونا نرى مثالاً على تثبيت الوحدة النمطية File::Data(إنها واجهة للوصول إلى بيانات الملف).

تثبيت وحدات cpan ناقص

متغير بيرل

والآن سنتحدث عن المتغيرات. يمكنك أن تتخيل متغيرًا مثل نوع الحاوية التي تحتوي على قيمة واحدة أو أكثر. بمجرد تعريفه، يظل اسم المتغير كما هو، لكن القيمة أو القيم تتغير مرارًا وتكرارًا.

هناك 3 أنواع من المتغيرات:

أنواع المتغيرات في بيرل

أنواع المتغيرات في بيرل

أسهلها هي الكميات القياسية، وهذا هو موضوعنا اليوم

المتغير العددي

هذا النوع من المتغيرات يحمل قيمة واحدة.

يبدأ اسمه بعلامة الدولار ومعرف Perl (وهو اسم المتغير الخاص بنا).

المتغير العددي في بيرل

المتغير العددي في بيرل

اصطلاح التسمية

إذا كنت معتادًا على لغات البرمجة الأخرى، فستعرف أن هناك قواعد معينة حول تسمية المتغيرات. وبالمثل، لدى لغة Perl ثلاث قواعد لتسمية الكميات القياسية.

  1. ستبدأ جميع الأسماء العددية بـ $. من السهل أن تتذكر أن تبدأ كل اسم بـ $. فكر في الأمر على أنه عددي $.
  2. مثل PHP. بعد الحرف الأول $، وهو خاص في لغة Perl، يُسمح باستخدام الأحرف الأبجدية الرقمية، أي من a إلى z ومن A إلى Z ومن 0 إلى 9. يُسمح أيضًا باستخدام حرف الشرطة السفلية. استخدم الشرطة السفلية لتقسيم أسماء المتغيرات إلى كلمتين. "لكن الحرف الأول لا يمكن أن يكون رقمًا"
  3. على الرغم من أن الأرقام يمكن أن تكون جزءًا من الاسم، إلا أنها لا يمكن أن تأتي مباشرة بعد $. وهذا يعني أن أول حرف بعد $ سيكون إما أبجديًا أو شرطة سفلية. تلك التي تأتي من C/C++ يجب أن تكون الخلفية قادرة على الفور على التعرف على التشابه. أمثلة

مثال بيرل:

$var;
$Var32;
$vaRRR43;
$name_underscore_23;

ومع ذلك، هذه ليست أسماء متغيرات عددية قانونية.

mohohoh                                              # $ character is missing 
$                                                    # must be at least one letter 
$47x                                           # second character must be a letter
$variable!                                 # you can't have a ! in a variable name

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

نوعين من أنواع البيانات العددية

  1. Numbers
  2. سلاسل

Numbers:

في هذا النوع من البيانات العددية يمكننا تحديد:

  • الأعداد الصحيحة، ببساطة هي أعداد صحيحة، مثل 2، 0، 534
  • الأعداد العشرية العائمة، وهي أعداد حقيقية، مثل 3.14، 6.74، 0.333

متغيرات الأرقام في بيرل

ملاحظة: بشكل عام، يرى مفسّر Perl الأعداد الصحيحة كأرقام ذات فاصلة عائمة. على سبيل المثال، إذا كتبت 2 في برامجك، فسيراه Perl مثل 2.0000

عدد صحيح حرفي:

يتكون من رقم واحد أو أكثر، مسبوقًا اختياريًا بعلامة زائد أو ناقص ويحتوي على شرطات سفلية.

أمثلة بيرل:

0;
-2542;
4865415484645          #this also can be written with underscores (for clarity) : 4_865_415_484_645

كما ترون - لا يوجد شيء خاص. لكن صدقوني، هذا هو النوع الأكثر شيوعًا من الكميات القياسية. انهم في كل مكان.

القيم الحرفية ذات الفاصلة العائمة:

وهو يتألف من أرقام، اختياريا ناقص، العلامة العشرية والأس.

أمثلة بيرل:

3.14;
255.000;
3.6e20;                                  # it's 3.6 times 10 to the 20th
-3.6e20;                                 # same as above, but negative
-3.6e-20;                                #it's negative 3.6 times 10 to the -20th
-3.6E-20;                                #we also can use E – this means the same the lowercase version -3.6e-20

حرفية الفاصلة العائمة في بيرل

التمثيل الثماني والست عشري والثنائي:

إنه بديل للنظام العشري. اسمح لي أن أعرض عليك تمثيل النظام الثماني والسداسي العشري والثنائي. يعرض جدول قصير جميع المعلومات المهمة حول هذه الأنماط الغريبة:

التمثيل الفئة الأساسية شرع بها
أوكتال 8 0 (صفر)
عشري 16 0x
ثنائي 2 0b

أمثلة بيرل:

255;                               # 255 in decimal notation
0377;                                   # 255 in octal notation
0xff;                                   # 255 in hexadecimal notation
0b11111111;                             # 255 in binary notation

كل هذه القيم لـ Perl تعني نفس الشيء. لا يقوم Perl بتخزين القيم بنفس التنسيق. سيتم تحويل هذه القيم السداسية العشرية والثنائية والثمانية داخليًا إلى القيم العشرية.

التعيين هو العملية الأكثر شيوعًا على مقياس عددي، وهو بسيط للغاية. يستخدم Perl علامة التساوي هذه. يأخذ قيمة التعبير من الجانب الأيمن ويضع هذه القيمة في المتغير الخاص بنا.

دعونا نلقي نظرة على الأمثلة:

$size=15;             # give $size value of 15
$y = -7.78;           # give $y value of -7.78

علاوة على ذلك، يمكنك وضع متغير ليس فقط رقمًا، ولكن أيضًا تعبيرًا.

$z = 6 + 12               # give $z value of 18

سلاسل

السلاسل: إنها أيضًا نوع بسيط جدًا من العددية.

يعتمد الحد الأقصى لطول السلسلة في لغة Perl على مقدار الذاكرة الموجودة بالكمبيوتر. لا يوجد حد لحجم السلسلة، أي عدد من الأحرف أو الرموز أو الكلمات يمكن أن يشكل سلاسلك. أقصر سلسلة لا تحتوي على أحرف. الأطول يمكن أن يملأ كل ذاكرة النظام. يمكن كتابة برامج Perl بالكامل في مجموعة أحرف ASCII ذات 7 بت. يسمح لك Perl أيضًا بإضافة أي مجموعة أحرف 8 بت أو 16 بت والمعروفة أيضًا باسم. أحرف غير ASCII ضمن سلسلة حرفية. أضافت Perl أيضًا دعمًا لـ Unicode UTF-8.

أنواع السلاسل في بيرل

كما هو الحال مع الأرقام، هناك نوعان مختلفان من السلاسل:

  • علامات الاقتباس المفردة لسلسلة حرفية
  • Double يقتبس سلسلة حرفية

سلسلة حرفية ذات علامات اقتباس مفردة

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

أمثلة بيرل:

#!/usr/bin/perl 
$num = 7;
$txt = 'it is $num';
print $txt;

الإخراج:

هو $num

هنا نظرًا لعدم أخذ قيمة علامات الاقتباس المفردة $num وتم إضافة الأحرف الحرفية '$' و'n' و'u' و'm' إلى قيمة $txt

Double- سلسلة حرفية مقتبسة

Double تُستخدم علامات الاقتباس لإحاطة البيانات التي تحتاج إلى الاستيفاء قبل المعالجة. وهذا يعني أن الأحرف والمتغيرات التي تم إفلاتها لا يتم إدراجها حرفيًا في العمليات اللاحقة، بل يتم تقييمها على الفور. يمكن استخدام أحرف الإفلات لإدراج أسطر جديدة وعلامات تبويب وما إلى ذلك.

أمثلة بيرل:

$num = 7; 
$txt = "it is $num"; 
print $txt;

الإخراج:

إنه 7

هنا بسبب علامتي الاقتباس المزدوجتين، يتم أخذ قيمة $num وإضافتها إلى قيمة $txt

Double-تستخدم علامات الاقتباس في استيفاء المتغيرات القياسية والمصفوفات، ولكن ليس التجزئات. من ناحية أخرى، يمكنك استخدام علامات الاقتباس المزدوجة لاستيفاء شرائح من كل من المصفوفات والتجزئات.

غامض\n

خذ بعين الاعتبار البرنامج التالي

أمثلة بيرل:

print "hello \n";

الإخراج:

مرحبا

لا يعرض Perl 'hello\n' فقط، بل يعرض 'hello' فقط. لماذا؟ لأن '\n' هي علامة خاصة وتعني أنك تريد الانتقال إلى سطر جديد أثناء عرض النص في برنامجك. طباعة "مرحبا \ ن سطر جديد"؛ السؤال التالي- هل هناك أي علامة خاصة أخرى؟ نعم إنهم هم! ولكن لا تقلق - فقط عدد قليل. تحقق من الجدول أدناه

بناء الوصف
\n خط جديد
\r عائد أعلى
\t علامة التبويب
\f نموذج تغذية
\b BACKSPACE
\a جرس
\e هرب
\ 007 أي قيمة ASCII ثماني (هنا، 007 = الجرس)
\x7f أي قيمة سداسية (هنا، 7f = حذف)
\\ مائل
\ " اقتباس مزدوج
\l الحرف الصغير التالي
\L أحرف صغيرة لجميع الحروف التالية حتى \E
\u الحرف التالي كبير
\U أحرف كبيرة لجميع الحروف التالية حتى \E
\E إنهاء \L، \U

أعلم أنه لا يوجد "القليل فقط"... لكن صدقني، يجب أن تعرف فقط

سلاسل متغيرة

إنها نفس العملية التي نراها في تعيين الأرقام. يحصل Perl على السلسلة من الجانب الأيمن لعلامة المساواة ويضع هذه السلسلة في متغير.

أمثلة بيرل:

$string = 'tutorial';                                      # give $string the eight-character string 'tutorial'
print $string;
$string = $size + 3 ;                                           # give $string the current value of $size plus 3
print $string;
$string = $ string * 5;                                         # multiplied $string by 5
print $string;

الإخراج:

البرنامج التعليمي 315

كما ترى، يمكنك وضع الأرقام والسلاسل في نفس المتغيرات. لا توجد فئة من المتغيرات.

تسلسل السلسلة (الفترة):

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

أمثلة متغيرات بيرل ' ':

#!/usr/bin/perl
$a = "Tom is";
$b = "favorite cat";
$c = $a ." mother's ". $b;
print $c;

الإخراج:

توم هو القط المفضل للأم

الخيوط

يتم ربط "$a"، "$b"، وتخزينهما في "$c" باستخدام عامل "."

فى النهايه…

التحويل بين Numbers والسلاسل:

كما تعلم، يقوم Perl تلقائيًا بالتحويل بين الأرقام إلى سلاسل حسب الحاجة. كيف يعرف Perl ما نحتاجه الآن؟ الأمر بسيط - كل شيء يعتمد على المشغل (سنتحدث عن المشغلات لاحقًا، الآن، فقط تقبل أن هناك الكثير من المشغلات، مختلفة للأرقام والسلاسل) إذا توقع المشغل رقمًا، فسيستخدم Perl القيمة كرقم. إذا توقع المشغل سلسلة، فسيستخدم Perl القيمة كسلسلة. بعبارة أخرى - لست بحاجة إلى القلق بشأن هذا النوع من التحويل. مثال قصير ويجب أن يكون كل شيء واضحًا:

أمثلة بيرل:

$string = "43";
$number = 28;
$result = $string + $number;
print $result;

الإخراج:

71

يتم تحويل قيمة السلسلة $ إلى عدد صحيح وإضافتها إلى قيمة $number.

يتم تعيين نتيجة الإضافة، 71، إلى $result.

نطاق المتغير – معدّلات الوصول

يمكننا أن نعلن عن العددية في أي مكان في البرنامج. ولكن عليك تحديد معدّل الوصول

هناك 3 أنواع من المعدلات

  1. my
  2. محلي
  3. شهادات

My: باستخدام هذا يمكنك الإعلان عن أي متغير محدد داخل الكتلة. أي ضمن الأقواس المتعرجة.

#!/usr/bin/perl 
my $var=5;
if(1)
{ 
my $var_2 =$var;
}
print $var_2;

لا يوجد إخراج

مخرجات البرنامج لن تكون شيئا!

دروس PERL للمبتدئين - الدليل الكامل

في المثال أعلاه، سترى أن هناك متغيرين تم الإعلان عنهما، أحدهما داخل كتلة if ($var_2) والآخر خارج كتلة If ($var). سيكون المتغير الذي تم الإعلان عنه خارج الكتلة قابلاً للوصول إلى if block ولكن المتغير الذي تم الإعلان عنه داخل if block لن يكون متاحًا للبرنامج الخارجي.

محلي: باستخدام هذا يمكننا في الواقع إخفاء نفس قيم المتغير إلى قيم مختلفة دون تغيير القيمة الأصلية للمتغير، لنفترض أن لدينا متغير $a تم تعيين القيمة له 5، يمكنك بالفعل تغيير قيمة هذا المتغير عن طريق إعادة الإعلان عن نفس المتغير باستخدام الكلمة الأساسية المحلية دون تغيير القيمة الأصلية للمتغير وهي 5. دعونا نرى كيف يعمل هذا مع مثال.

#!/usr/bin/perl
$var = 5;
{
local $var = 3;
print "local,\$var = $var \n";
}
print "global,\$var = $var \n";

سيكون إخراج البرنامج أعلاه بهذه الطريقة.

محلي، $var = 3

عالمي، $var = 5

بهذه الطريقة يمكننا تغيير قيمة المتغير دون التأثير على القيمة الأصلية.

Our: بمجرد الإعلان عن متغير باستخدام مُعدِّل الوصول "our" فإنه يمكن استخدامه عبر الحزمة بأكملها. لنفترض أن لديك وحدة Perl أو حزمة test.pm التي تحتوي على متغير تم الإعلان عنه بنطاقنا. يمكن الوصول إلى هذا المتغير في أي برامج نصية ستستخدم تلك الحزمة.

إذا كنت جادًا بشأن البرمجة بلغة Perl، فيجب أن تبدأ برنامجك بـ

#! / usr / local / bin / perl

استخدام صارم

سيساعدك هذا على كتابة تعليمات برمجية أفضل وأكثر نظافة. يؤدي "استخدام صارم" إلى تشغيل براغما صارمة مما يجعلك تعلن عن متغيراتك باستخدام كلمتي الرئيسية.

هذه ممارسة برمجة جيدة

#!/usr/local/bin/perl
use strict;
$var = 10;
print "$var";

النتيجة: خطأ

#!/usr/local/bin/perl
use strict;
my $var = 10;
print "$var";

الإخراج:

10

مصفوفة بيرل

ما هي مصفوفة بيرل؟

المصفوفة هي نوع خاص من المتغيرات التي تخزن البيانات في شكل قائمة؛ ويمكن الوصول إلى كل عنصر باستخدام رقم الفهرس الذي سيكون فريدًا لكل عنصر. يمكنك تخزين الأرقام والسلاسل والقيم العائمة وما إلى ذلك في المصفوفة. هذا يبدو رائعًا، فكيف ننشئ مصفوفة في بيرل؟ في بيرل، يمكنك تعريف مصفوفة باستخدام الحرف '@' متبوعًا بالاسم الذي تريد إعطاؤه. دعنا نفكر في تعريف مصفوفة في بيرل.

بلدي @array؛

هذه هي الطريقة التي نحدد بها مصفوفة في لغة Perl؛ ربما تفكر في كيفية تخزين البيانات فيه. هناك طرق مختلفة لتخزين البيانات في مصفوفة. هذا يعتمد على الطريقة التي ستستخدمها بها.

my @array=(a,b,c,d);
print @array;

الإخراج:

ABCD

هذه مصفوفة تحتوي على 4 عناصر.

يبدأ فهرس المصفوفة من 0 وينتهي إلى الحد الأقصى لحجمه المعلن، في هذه الحالة، الحد الأقصى لحجم الفهرس هو 3.

مثال على صفيف بيرل

مثال على صفيف بيرل

يمكنك أيضًا الإعلان عن مصفوفة بالطريقة المذكورة أعلاه؛ والفرق الوحيد هو أنه يخزن البيانات في مصفوفة معتبراً أن المسافة البيضاء هي الفاصل. هنا، qw() تعني كلمة الاقتباس. أهمية هذه الوظيفة هي إنشاء قائمة من الكلمات. يمكنك استخدام qw بعدة طرق للإعلان عن مصفوفة.

@array1=qw/a b c d/;
@array2= qw' p q r s'; 
@array3=qw { v x y z};
print @array1;
print @array2;
print @array3;

الإخراج:

abcdpqrsvxyz

لنفترض أنك تريد تعيين قيمة للرقم 5th عنصر من مجموعة، كيف نحن ذاهبون للقيام بذلك.

$array [4] ='e';

صفيف متسلسل

المصفوفات المتسلسلة هي تلك التي تخزن فيها البيانات بشكل متسلسل. لنفترض أنك تريد تخزين 1-10 أرقام أو أحرف أبجدية az في مصفوفة. بدلاً من كتابة كل الحروف، يمكنك تجربة شيء مثل التالي -

@numbers= (1..10);
print @numbers;                   #Prints numbers from 1 to 10;

الإخراج:

12345678910

حجم صفيف بيرل

لدينا مصفوفة متاحة بالفعل، وأنت لا تعرف حجم تلك المصفوفة، فما هي الطريقة الممكنة للعثور عليها.

@array= qw/a b c d e/;
print $size=scalar (@array);

هل يمكننا الحصول على حجم المصفوفة دون استخدام الدوال؟ نعم نستطيع.

@array= qw/a b c d e/;
print $size=scalar (@array);
print "\n";
print $size=$#array + 1;                           # $#array will print the Max Index of the array, which is 5 in this case

الإخراج:

5

5

مجموعة ديناميكية

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

ما هي المصفوفة الديناميكية؟

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

سوف نستخدم بعض وظائف Perl المضمنة للقيام بهذه المهمة.

my $string="This is a kind of dynamic array";
my @array;
@array=split('a',$string);
foreach(@array)
{
print "$_ \n”;
# This is a special variable which stores the current value.
}

الإخراج:

هذا هو

نوع من دين

هيئة التصنيع العسكري

rr

y

تقوم وظيفة التقسيم بتقسيم محتوى السلسلة إلى مصفوفة بناءً على المحدد المقدم لها. ستقوم هذه الوظيفة أيضًا بإزالة المُحدِّد من السلسلة، وهو في هذه الحالة هو "a"؛

الدفع، والفرق، والتحويل، وعدم التحويل لمصفوفات Perl:

يمكن استخدام هذه الوظائف في Perl لإضافة/حذف عناصر المصفوفة.

  • Perl Push: يضيف عنصر المصفوفة في نهاية المصفوفة الموجودة.
  • Perl Pop: يزيل العنصر الأخير من المصفوفة.
  • بيرل Shift: يزيل العنصر الأول من المصفوفة.
  • Perl Unshift: يضيف عنصرًا في بداية المصفوفة.

وظائف المصفوفة في بيرل

دعونا نرى مثالاً حيث يمكننا استخدام الوظائف أدناه.

@days = ("Mon","Tue","Wed");
print "1st : @days\n";
push(@days, "Thu");                                             # adds one element at the end of an array
print "2nd when push : @days\n";
unshift(@days, "Fri");                                          # adds one element at the beginning of an array
print "3rd when unshift : @days\n";
pop(@days);
print "4th when pop : @days\n";                                 # remove one element from the last of an array.
shift(@days);                                                   # remove one element from the beginning of an array.
print "5th when shift : @days\n";

الإخراج:

الأول: الإثنين، الثلاثاء، الأربعاء

الثاني عند الدفع: الإثنين، الثلاثاء، الأربعاء، الخميس

3- عند عدم التحول: الجمعة، الاثنين، الثلاثاء، الأربعاء، الخميس

الرابع عند البوب: الجمعة، الاثنين، الثلاثاء، الأربعاء

الخامس عندما يكون الدوام : الاثنين والثلاثاء والاربعاء

تجزئة بيرل

لماذا نحتاج التجزئة؟

لقد تعلمنا بالفعل عن الكميات القياسية والمصفوفات في الأقسام السابقة.

ما الذي تفعله الكميات بالضبط؟ يقوم فقط بتخزين الأعداد الصحيحة والسلاسل.

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

ما هي التجزئة؟

يمكن للتجزئة أيضًا أن تحتوي على أكبر عدد ممكن من الكميات التي يمكن أن تحتويها المصفوفة. والفرق الوحيد هو أننا لا نملك أي فهرس بل لدينا مفاتيح وقيم. يمكن الإعلان عن التجزئة، بدءًا من % متبوعًا باسم التجزئة. دعونا نرى مثالاً كيف يمكننا تعريف تجزئة Perl وكيف يمكننا تمييزها عن المصفوفة

فكر في مثال لثلاثة أشخاص وأعمارهم ممثلة في مصفوفة.

@array=('Sainath',23,'Krishna',24,'Shruthi',25);        #This is how an array looks.
print @array;

الإخراج:

سيناث33Krishna24 شروثي25

بهذه الطريقة يكون من الصعب معرفة الأعمار الفردية لأننا نحتاج إلى تذكر موقعي الفهرس الخاصين بالاسم والعمر لجميع الأشخاص. قد يكون الأمر بسيطًا عندما يكون لديك 3 أسماء، ولكن عندما يكون لديك 1000 أو أكثر؟ انت تعرف الاجابة.

التجزئة في بيرل

يمكننا التغلب على هذا باستخدام التجزئة.

مثال التجزئة:

print %hash=( 'Sainath' => 23, 'Krishna' => 24, 'Shruthi' => 25); # This is how we create a hash.
print %hash=('Sainath',23,'Krishna',24,'Shruthi',25);# This way of assigning is called list.

الإخراج:

سيناث33Krishna24شروثي25سيناث33Krishna24 شروثي25

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

لتتمكن من طباعة عمر أي شخص، ما عليك سوى أن تتذكر اسم ذلك الشخص.

print $hash{'Krishna'};          # This how we should access a hash. Key enclosed within {}.

ربما تساءلت عن سبب استخدامي $hash{KeyName}، تذكر أن التجزئة عبارة عن مجموعة من الكميات القياسية مرة أخرى. لذا، يمكننا استخدام $ الذي يمثل العددية للوصول إلى كل عنصر تجزئة.

مثال على التجزئة في بيرل

ملاحظة: يجب أن يكون كل مفتاح في التجزئة فريدًا وإلا فإنه سيتجاوز القيمة التي تم تعيينها مسبقًا.

كيف يمكننا تخصيص تجزئة لتجزئة أخرى؟ بسيطة، بنفس الطريقة التي نفعلها ل

يمكننا أيضًا طباعة التجزئة بأكملها.

%hash=( 'Tom' => 23);
%newHash=%hash; # Assigning hash to a new hashprint %newHash; 
print %newHash;

الإخراج:

Tom23

أضف تجزئة بيرل

كما ترون، لدينا بالفعل تجزئة %newHash، ونحن الآن بحاجة إلى إضافة المزيد من الإدخالات إليها.

$newHash{'Jim'}=25;
$newHash{'John'}=26;
$newHash{'Harry'}=27;
print %newHash;

الإخراج:

جيم25جون26هاري27

مفتاح حذف بيرل

قد ترغب في حذف إدخال من التجزئة. هذه هي الطريقة التي يمكننا أن نفعل ذلك.

delete $newHash{'Jim'};#This will delete an entry from the hash.

الحذف هو وظيفة يحمل في ثناياه عوامل بيرل. سنرى هنا مثالاً لتعيين تجزئة لمصفوفة.

@array=%newHash;
print "@array";

ملاحظة: عندما تقوم بطباعة تجزئة أو عند تخزين التجزئة في مصفوفة. قد يختلف الترتيب دائمًا. انها ليست هي نفسها دائما.

يمكننا تعيين مفاتيح أو قيم تجزئة فقط للمصفوفة.

@arraykeys= keys(%newHash);
@arrayvalues=values(%newHash);
print "@arraykeys\n";
print "@arrayvalues\n";    # \n to print new line.		

لإزالة كافة الإدخالات الموجودة في التجزئة، يمكننا تعيين التجزئة مباشرة إلى قيمة خالية.

%newHash=();# سيؤدي هذا إلى إعادة تعريف التجزئة بدون إدخالات.

عبارات بيرل الشرطية

يمكننا استخدام العبارات الشرطية في لغة بيرل. إذن ما هي العبارات الشرطية؟ العبارات الشرطية هي تلك التي تتحقق فيها فعليًا من استيفاء بعض الظروف في التعليمات البرمجية الخاصة بك.

فكر في مثال، أنت تشتري بعض الفواكه، ولا تحب أن يزيد سعرها عن 100 دولار. لذا، القاعدة هنا هي 100 دولار.

يدعم Perl نوعين من العبارات الشرطية؛ هم إذا وإلا.

بيرل إذا

إذا كان سيتم تنفيذ كتلة التعليمات البرمجية، عندما يكون الشرط صحيحا.

عبارات بيرل الشرطية

my $a=5;
if($a==5)
{
   print "The value is $a";
}

الإخراج:

5

بيرل إذا كان آخر

هذا يبدو جيدا. دعونا نفكر في موقف حيث $a ليس 5.

my $a=10;
if($a==5)
{
    print "The values is $a ---PASS";
}
else
{
    print "The value is $a ---FAIL";
}

الإخراج:

القيمة هي 10 —فشل

بهذه الطريقة يمكننا التحكم في شرط واحد فقط في كل مرة. هل هو القيد؟ لا، يمكنك أيضًا التحكم في الشروط المختلفة باستخدام if…elsif…else.

بيرل آخر إذا

my $a=5;
if($a==6)
{
    print "Executed If block -- The value is $a";
}
elsif($a==5)
{
    print "Executed elsif block --The value is $a";
}
else
{
    print "Executed else block – The value is $a";
}

الإخراج:

تم تنفيذ كتلة elsif – القيمة هي 5

في الحالة المذكورة أعلاه، سيتم تنفيذ كتلة elsif حيث أن $a يساوي 5.

قد تكون هناك مواقف حيث سيتم فشل كل من كتل التعليمات البرمجية if وelsif. في هذا السيناريو، سيتم تنفيذ كتلة تعليمات برمجية أخرى. يمكنك بالفعل إزالة التحقق من رمز آخر إذا كنت لا ترغب في تضمينه.

بيرل متداخل إذا

في هذه الحالة، يمكنك استخدام مقطع كود if في مقطع كود if آخر.

my $a=11; #Change values to 11,2,5 and observe output
if($a<10){
  print "Inside 1st if block";
        if($a<5){
                print "Inside 2nd if block --- The value is $a";
        }
        else{
                print " Inside 2nd else block --- The value is $a";
        }
	}
	else{
        	print "Inside 1st else block – The value is $a";
    }

الإخراج:

داخل الكتلة الأولى - القيمة هي 1

قم بتنفيذ نفس الكود عن طريق تغيير قيمة $a؛ يمكنك معرفة الباقي.

بيرل ما لم

لقد حصلت بالفعل على فكرة عما سيحدث (إذا كان الشرط صحيحًا، فسيتم تنفيذ كتلة التعليمات البرمجية). ما لم يكن عكس if، ما لم يتم تنفيذ كتلة التعليمات البرمجية إذا كان الشرط خاطئًا.

my $a=5;
unless($a==5)
{
   print "Inside the unless block --- The value is $a";
}
else
{
   print "Inside else block--- The value is $a";
}

الإخراج:

داخل الكتلة الأولى - القيمة هي 1

خمن ماذا سيكون الناتج. أنت محق!!!!!. سيكون الإخراج عبارة الطباعة الخاصة بكتلة else. نظرًا للشرط الوارد في ما لم تكن كتلة التعليمات البرمجية صحيحة، تذكر أنه سيتم تنفيذ ما لم تكن الكتلة إلا إذا كان الشرط خاطئًا. قم بتغيير قيمة $a وقم بتنفيذ الكود وسترى الفرق.

بيرل باستخدام إذا

$a= " This is Perl";
if($a eq "SASSDSS"){
print "Inside If Block";
}
else
{
print "Inside else block"
}

الإخراج:

داخل كتلة أخرى

باستخدام ما لم

$a= " This is Perl";
unless($a eq "SASSDSS"){
print "Inside unless Block";
}
else
{
print "Inside else block"
}

الإخراج:

داخل ما لم كتلة

حلقات بيرل – هياكل التحكم

يدعم Perl هياكل التحكم المشابهة للغات البرمجة الأخرى. يدعم Perl أربعة أنواع من هياكل التحكم لـ foreach و while و until. نستخدم هذه العبارات لتنفيذ بعض التعليمات البرمجية بشكل متكرر.

للحلقة بيرل

سيتم تنفيذ كتلة التعليمات البرمجية حتى يتم استيفاء الشرط. لنأخذ مثالاً لكيفية تنفيذ حلقة Perl لمصفوفة.

my @array=(1..10);
for(my $count=0;$count<10;$count++)
{
    print "The array index $count value is $array[$count]";
    print "\n";
}

الإخراج:

قيمة فهرس الصفيف 0 هي 1

قيمة فهرس الصفيف 1 هي 2

قيمة فهرس الصفيف 2 هي 3

قيمة فهرس الصفيف 3 هي 4

قيمة فهرس الصفيف 4 هي 5

قيمة فهرس الصفيف 5 هي 6

قيمة فهرس الصفيف 6 هي 7

قيمة فهرس الصفيف 7 هي 8

قيمة فهرس الصفيف 8 هي 9

قيمة فهرس الصفيف 9 هي 10

هنا، في تعبير ()، هناك العديد من العبارات المضمنة. هناك معنى لكل واحد منهم.

من أجل (التهيئة؛ الشرط؛ المتزايد)

هنا طريقة أخرى لاستخدام ل.

for(1..10)
{
    print "$_ n";
    print "\n";
}

الإخراج:

1n

2n

3n

4n

5n

6n

7n

8n

9n

10n

بيرل فوريتش

يمكن استخدام for كل عبارة بنفس الطريقة المستخدمة في for؛ والفرق الرئيسي هو أنه ليس لدينا أي فحص للحالة وزيادة في هذا.

لنأخذ نفس المثال مع foreach Perl.

my @array=(1..10);
foreach my $value (@array)
{  
	print " The value is $value\n";
}

الإخراج:

القيمة هي 1

القيمة هي 2

القيمة هي 3

القيمة هي 4

القيمة هي 5

القيمة هي 6

القيمة هي 7

القيمة هي 8

القيمة هي 9

القيمة هي 10

يأخذ Foreach كل عنصر في المصفوفة ويعين تلك القيمة إلى $var لكل تكرار. يمكننا أيضًا استخدام $_ لنفسه.

my @array=(1..10);
foreach(@array)
{
    print " The value is $_ \n"; # This is same as the above code.
}

الإخراج:

القيمة هي 1

القيمة هي 2

القيمة هي 3

القيمة هي 4

القيمة هي 5

القيمة هي 6

القيمة هي 7

القيمة هي 8

القيمة هي 9

القيمة هي 10

يبدو هذا جيدًا للوصول إلى المصفوفات. ماذا عن التجزئة، كيف يمكننا الحصول على مفاتيح التجزئة والقيم باستخدام foreach؟

يمكننا استخدام foreach للوصول إلى مفاتيح وقيم التجزئة عن طريق تكرارها.

للحلقة في بيرل

my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25);
foreach my $key (keys %hash)
{
print "$key \n";
}

الإخراج:

ميكي

توم

جيري

ربما تتساءل لماذا استخدمنا المفاتيح في foreach(). المفاتيح هي وظيفة مدمجة في لغة Perl حيث يمكننا الوصول بسرعة إلى مفاتيح التجزئة. ماذا عن القيم؟ يمكننا استخدام وظيفة القيم للوصول إلى قيم التجزئة.

my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25);
foreach my $value(values %hash) # This will push each value of the key to $value
{
	 print " the value is $value \n";
}

الإخراج:

القيمة هي 24

القيمة هي 23

القيمة هي 25

بيرل بينما

حلقة Perl while عبارة عن بنية تحكم، حيث سيتم تنفيذ كتلة التعليمات البرمجية حتى يصبح الشرط صحيحًا.

لن يتم الخروج من كتلة التعليمات البرمجية إلا إذا كان الشرط خاطئًا.

لنأخذ مثالاً على حلقة Perl while.

أثناء الحلقة في بيرل

إليك مشكلة، والتي ستتطلب إدخالاً من المستخدم ولن يتم الخروج منها إلا بعد ظهور الرقم "7".

#!/usr/bin/perl
$guru99 = 0;
$luckynum = 7;
print "Guess a Number Between 1 and 10\n";
$guru99 = <STDIN>;
while ($guru99 != $luckynum)
{
	print "Guess a Number Between 1 and 10 \n ";
	$guru99 = <STDIN>;
}
print "You guessed the lucky number 7"

الإخراج:

تخمين رقم بين 1 و 10

9

تخمين رقم بين 1 و 10

5

تخمين رقم بين 1 و 10

7

لقد خمنت رقم الحظ 7

في المثال أعلاه، لن يكون شرط while صحيحًا إذا أدخلنا مدخلات أخرى غير '7'.

إذا رأيت كيف يعمل while هنا، فلن يتم تنفيذ كتلة التعليمات البرمجية إلا إذا كان الشرط صحيحًا.

بيرل يفعل بينما

سيتم تنفيذ حلقة Do while مرة واحدة على الأقل حتى لو كان الشرط الموجود في قسم while خاطئًا.

لنأخذ نفس المثال باستخدام do while.

$guru99 = 10;
 do {
 print "$guru99 \n";
 $guru99--;
 } 
 while ($guru99 >= 1);
 print "Now value is less than 1";

الإخراج:

10

9

8

7

6

5

4

3

2

1

الآن القيمة أقل من 1

بيرل حتى

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

لنأخذ نفس المثال الذي استخدمناه في حالة من الوقت.

إليك مشكلة ستتطلب إدخالاً من المستخدم ولن يتم الخروج منها حتى يتم تقديم الاسم بخلاف "sai".

print "Enter any name \n";
 my $name=<STDIN>;
 chomp($name);
 until($name ne 'sai')
 {
    print "Enter any name \n";
    $name=<STDIN>;
    chomp($name);
 }

الإخراج:

أدخل أي اسم ساي

بيرل يفعل حتى:

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

print "Enter any name \n";
 my $name=<STDIN>;
 chomp($name);
 do
 {
     print "Enter any name \n";
     $name=<STDIN>;
    chomp($name);
 }until($name ne 'sai');

الإخراج:

أدخل أي اسم هوارد

أدخل أي اسم شيلدون

أدخل أي اسم ساي

قم بتنفيذ while وdo-while و until و do- until لرموز المثال لمعرفة الفرق.

بيرل Operaتور

ما هي تفاصيل Operaتور؟

Operaتشير Tors في لغة الكمبيوتر إلى إجراء يمكن تنفيذه على مجموعة معينة من المتغيرات أو القيم التي يمكن للكمبيوتر فهمها. قامت بيرل بدمج معظم Operaتتضمن لغة C عددًا كبيرًا من المشغلات مقارنة بلغات البرمجة الأخرى. Operaيتم تصنيف المتغيرات إلى معاملات حسابية ومنطقية وعلائقية ومتغيرات تعيين.

علم الحساب Operaتورس:

المعاملات الحسابية هي المعاملات التي يمكن استخدامها لإجراء بعض العمليات الحسابية الأساسية. هذه المعاملات الحسابية هي معاملات ثنائية حيث نحتاج إلى وسيطتين لإجراء عملية أساسية. يمكننا أيضًا استخدام المعاملات الأحادية لإجراء عمليات أساسية أخرى؛ يمكنك رؤية الفرق في الأمثلة أدناه.

المُشغل الوصف مثال

+

عملية الجمع المستخدمة لجمع قيمتين أو متغيرين

عقد القيم

$س=5+6; # أو

$ص=6;

$z=$x+$y;

-

عامل الطرح المستخدم لطرح قيمتين أو متغيرين يحملان قيمًا

$x=6-5; # أو

$ص=6;

$z=$x-$y;

*

عامل الضرب المستخدم لضرب قيمتين أو متغيرين يحملان قيمًا

$س=6*5; # أو

$ص=6;

$z=$x*$y;

/

عامل القسمة المستخدم لقسمة قيمتين أو متغيرين يحملان قيمًا

$x=36/6; # أو

$ص=6;

$z=$x/$y;

**

العامل الأسي المستخدم لتوفير الأس والحصول على القيمة.

مثال: 22 = 4 ، 33 = 27

$x=5**5; # أو

$س=4;

$ص=2;

$z=$x**$y;

%

عامل معامل يستخدم للحصول على التذكير أثناء تقسيم قيمتين أو متغيرات تحمل قيمًا

$x=5%2; # أو

$س=10;

$ص=2;

$z=$x % $y;

++

عامل الجمع الأحادي لزيادة قيمة المتغير بمقدار 1

$س=5;

$x++;

Or

++$x;

-

عامل الطرح الأحادي لتقليل قيمة المتغير بمقدار 1

$س=5;

$x-; #نقصان المنصب

Or

–$x;# إنقاص مسبق

مثال لاستكمال كافة العمليات المذكورة أعلاه.

my $x=10;
my $y=2;
my $z;
$z=$x+$y;
print ("Add of $x and $y is $z \n");
$z=$x-$y;
print ("Sub of $x and $y is $z \n");
$z=$x*$y;
print ("Mul of $x and $y is $z \n");
$z=$x/$y;
print ("Div of $x and $y is $z \n");
$z=$x**$y;
print ("Exp of $x and $y is $z \n");
$z=$x%$y;
print ("Mod of $x and $y is $z \n");

الإخراج:

جمع 10 و2 يساوي 12

فرعي 10 و 2 هو 8

مول 10 و 2 يساوي 20

قسمة 10 و2 هي 5

خبرة 10 و 2 هي 100

نموذج 10 و 2 هو 0

مهمة Operaتورس:

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

المُشغل الوصف مثال

+=

عامل الجمع المستخدم لإضافة القيمة وتعيينها لنفس المتغير

$س=4;

$x+=10;

-=

عامل الطرح المستخدم لطرح القيمة وتعيينها لنفس المتغير

$س=4;

$x-=10;

*=

عامل الضرب المستخدم لإضافة القيمة وتعيينها لنفس المتغير

$س=4;

$x*=10;

/=

عامل القسمة المستخدم لقسمة القيمة وتعيينها لنفس المتغير

$س=4;

$x/=10;

** =

عامل أسي يستخدم للحصول على الأس وتعيين القيمة لنفس المتغير

$س=4;

$x**=10;

%=

عامل المعامل المستخدم للحصول على تذكير أثناء القسمة وتعيين القيمة لنفس المتغير

$س=10;

$x%=4;

مثال لاستكمال كافة العمليات المذكورة أعلاه.

my $x=10;
$x+=5;
print("Add = $x\n");
$x-=5;
print("Sub= $x\n");
$x*=5;
print("Mul = $x\n");
$x/=5;
print("Div = $x\n");

الإخراج:

أضف = 15

الفرعي = 10

مول = 50

القسم = 10

المنطقية والعلائقية Operaتورس:

تستخدم لغة Perl عوامل منطقية لمقارنة الأرقام والسلاسل. وفي أغلب الأحيان، تُستخدم العوامل المنطقية في العبارات الشرطية.

المنطقية والعلائقية Operaتورس في بيرل

المنطقية والعلائقية Operaتورس في بيرل

المُشغل الوصف

== أو مكافئ

Operaيستخدم tor للتحقق مما إذا كان كلا المتغيرين متساويين

!=أو ني

Operaيستخدم tor للتحقق مما إذا كان كلا المتغيرين غير متساويين

> أو جي تي

Operaيستخدم تور للتحقق مما إذا كان

أ أكبر من ب

<أو لتر

Operaيستخدم تور للتحقق مما إذا كان

أ أقل من ب

>= أو جنرال الكتريك

Operaيستخدم تور للتحقق مما إذا كان

أ أكبر من أو يساوي ب

<= أو لو

Operaيستخدم تور للتحقق مما إذا كان

أ أصغر من أو يساوي ب

|| او او

Operaيستخدم تور للتحقق من أن A أو B يحمل قيمة

&&او و

Operaيستخدم تور للتحقق من أن كلا من A وB يحتفظان بقيمة

دعونا نأخذ مثالا حيث يمكننا شرح جميع السيناريوهات.

my $x=5;
my $y=5;
if($x == $y){
print ("True -- equal $x and $y \n");
}
else{
print ("False -- not equal $x and $y\n");
}
$x=6;
$y=7;
if($x != $y){
print ("True -- not equal $x and $y\n");
}
else{
print ("False -- equal $x and $y\n");
}
if($y > $x){
print ("True -- $y greater than $x\n");
}
else{
print ("False -- $y greater than $x\n");
}
if($x < $y){
print ("True -- $x less than $y\n");
}
else{
print ("False -- $x less than $y\n");
}
if($x <= $y){
print ("True -- $x less than $y\n");
}
else{
print ("False -- $x less than $y\n");
}
if($y >= $x){
print ("True -- $y greater than $x\n");
}
else{
print ("False -- $y greater than $x\n");
}

الإخراج:

صحيح - يساوي 5 و 5

صحيح - لا يساوي 6 و 7

صحيح - 7 أكبر من 6

صحيح - 6 أقل من 7

صحيح - 6 أقل من 7

صحيح - 7 أكبر من 6

يمكنك رؤية أمثلة للمشغلات المنطقية في الأقسام اللاحقة.

متغيرات بيرل الخاصة

ما هي المتغيرات الخاصة لبيرل؟

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

عندما نريد استخدام المتغير الخاص باسمه، يتعين علينا تحميل وحدة Perl "استخدام اللغة الإنجليزية"، لنقول بوضوح لمترجم Perl أننا سنستخدم متغيرات خاصة باستخدام اسمه.

المتغيرات العددية الخاصة

متغير الوصف

$_$ARG

هذا هو المتغير الافتراضي الذي يخزن القيم الحالية.

$0 أو $PROGRAM_NAME

يخزن اسم ملف البرنامج النصي Perl.

$/

فاصل سجل الإدخال، له قيمة افتراضية هي '\n' وهي حرف السطر الجديد

$.

يحمل رقم السطر الحالي للملف الذي تتم قراءته

$,

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

$\

فاصل سجل الإخراج، ستكون قيمة هذا المتغير فارغة؛ يمكننا تعيين أي قيمة لهذا، والتي سيتم استخدامها بواسطة بيان print() أثناء طباعة الإخراج.

$#

يتم استخدام هذا المتغير لتنسيق الإخراج أثناء طباعة الأرقام.

$%$FORMAT_PAGE_NUMBER

سيحتفظ برقم الصفحة الحالية للملف المقروء.

$=$FORMAT_LINES_PER_PAGE

سيحتفظ بطول الصفحة الحالية للملف المقروء.

$-$FORMAT_LINES_LEFT

يحمل قيمة عدد الأسطر المتبقية للطباعة من الصفحة.

$~$FORMAT_NAME

اسم التنسيق: يحمل تنسيق الإخراج المحدد حاليًا بشكل افتراضي اسم مؤشر الملف.

$^$FORMAT_TOP_NAME

يحمل قيمة تنسيق العنوان لمعالج الملف، وستكون القيمة الافتراضية _TOP متبوعة باسم معالج الملف.

$|$OUTPUT_AUTOFLUSH

الإعداد الافتراضي هو صفر؛ يتم استخدامه لمسح مخزن الإخراج بعد كل كتابة () أو طباعة ().

$$

سيحتفظ برقم العملية قيد التشغيل لمترجم Perl.

$?

رمز الحالة: استدعاء الأنابيب والنظام. حالة إرجاع الأمر الذي تم تنفيذه.

مباراة $&$

يُستخدم هذا في التعبيرات العادية، وسيحتوي على سلسلة من آخر تطابق ناجح للنمط.

$`$المباراة التمهيدية

يُستخدم هذا في التعبيرات العادية، وسيحتوي على سلسلة يسبقها آخر تطابق ناجح للنمط.

$'$ما بعد المباراة

عند استخدامه في التعبيرات العادية، سيحتوي هذا على سلسلة متبوعة بآخر مطابقة ناجحة للنمط.

$+$LAST_PAREN_MATCH

يحمل سلسلة القوس الأخير المطابق لبحث النمط الأخير.

$

1 دولار، 2 دولار، 3 دولار.... يحتفظ بقيم النمط المتطابقة بالترتيب.

$[

الفهرس الأول: صفيف، سلسلة فرعية.

$]

نسخة من بيرل.

$ "

الفاصل المستخدم لعناصر القائمة، القيمة الافتراضية هي مسافة بيضاء.

$;

فاصل منخفض يستخدم في صفائف متعددة الأبعاد

$!

في السياق الرقمي، يطبع رقم الخطأ. في سياق السلسلة، قم بطباعة الخطأ.

$@

سيحتفظ بمعلومات خطأ بناء الجملة، المستخدمة عند استخدام eval().

$<

يحمل UID الحقيقي (معرف المستخدم) لعملية تشغيل البرنامج النصي.

$>

يحمل UID الفعال لعملية تشغيل البرنامج النصي.

$(

يحمل GID الحقيقي (معرف المجموعة) لعملية تشغيل البرنامج النصي.

$)

يحمل GID الفعال لعملية تشغيل البرنامج النصي.

تصحيح الأخطاء $^D$

يحمل القيمة الحالية لعلامات التصحيح.

$^ج

يحتفظ بالقيمة الحالية للعلامة عند استخدام مفتاح سطر الأوامر –c.

$^ف

يتم تعيين الحد الأقصى لواصف ملفات النظام، افتراضيًا، على 2

$^I$INPLACE_EDIT

يحمل قيمة –i تبديل سطر الأوامر.

$^م

يمكن استخدام تجمع الذاكرة الخاصة عندما يموت برنامج Perl النصي بسبب خطأ في الذاكرة.

$^O$OSNAME

Operaيتم تخزين معلومات النظام. "Linux" لأنظمة Linux، و"mswin32" لأنظمة Linux Windows الأنظمة.

$^T$الوقت الأساسي

الوقت الذي يتم فيه تشغيل البرامج النصية بالثواني.

$^W$تحذير

القيمة الحالية لمفتاح سطر الأوامر –w. مفتاح التحذير.

$ARGV

اسم الملف الحالي، عند استخدام <>.

صفيف المتغيرات الخاصة:

متغير الوصف

INC

يحتوي على قائمة بالمسارات، حيث يمكن النظر إلى وحدات مكتبة Perl أو البرامج النصية أثناء تنفيذ البرنامج النصي الحالي. يتم استخدام @INC عن طريق الاستخدام ويتطلب عبارات للنظر في تلك المسارات لوحدات المكتبة.

ARGV

يخزن وسيطات سطر الأوامر التي تم تمريرها.

@_

يُستخدم في الإجراءات الفرعية، أثناء تمرير المعلمات إلى الإجراءات الفرعية.

@F

هذا هو المصفوفة التي يتم تخزين خطوط الإدخال فيها عند التقسيم التلقائي –a (يتم استخدام مفتاح سطر الأوامر).

متغيرات التجزئة الخاصة:

متغير الوصف

٪شركة

سيكون اسم الملف هو المفاتيح؛ ستكون القيم هي المسار إلى تلك الملفات. تستخدم من خلال القيام والاستخدام والحاجة.

%ENV

المتغيرات البيئية للنظام.

%سيج

Signalمعالج.

بيرل التعبير العادي

ما هو التعبير العادي؟

إن تعبيرات Perl العادية قوية بما يكفي لمطابقة أنماط السلسلة داخل العبارات أو مجموعة العبارات. تُستخدم التعبيرات العادية في الغالب في تحليل النصوص ومطابقة الأنماط وغير ذلك الكثير بناءً على المتطلبات. لدينا عوامل تشغيل معينة، تُستخدم بشكل خاص بواسطة ربط نمط التعبيرات العادية =~ و!~، وهي عوامل تشغيل الاختبار والتعيين.

منتظم التعبير Operaالاختصاصات

منتظم التعبير Operaتورس في بيرل

منتظم التعبير Operaتورس في بيرل

  • مباراة بيرل - م //
  • بديل بيرل – s///
  • ترجمة لغة بيرل – tr///

قبل المضي قدمًا، نحتاج إلى معرفة بعض الأشياء حول التعبير العادي؛ هناك أشياء معينة مثل أحرف التعريف وأحرف البدل في بناء جملة Perl Regex.

فحم معنى

\

خاص أو اقتباس

*

تطابق 0 أو أكثر من الشخصيات

+

تطابق 1 أو أكثر من الشخصيات

?

مطابقة 0 أو 1 حرف

|

يمكن استخدامها لمطابقة الأنماط البديلة

()

تستخدم لتخزين النمط المطابق

[]

يمكن تمرير مجموعة من الشخصيات. تستخدم خصيصا للأرقام والحروف الهجائية.

{}

يُستخدم لتوفير عدد الوقت الذي يمكن إجراء المباراة فيه.

^

بداية السلسلة

$

نهاية السلسلة

\w

يستخدم لمطابقة حرف واحد أو كلمة واحدة يمكن أن تكون أبجدية رقمية بما في ذلك "_"

\W

تطابق أي شيء آخر غير الأبجدية الرقمية

\s

تستخدم لمطابقة المسافات البيضاء

\S

تطابق أي شيء آخر غير المسافة البيضاء

\d

تطابق الأرقام. القيم غير العشرية والقيم السالبة

\D

تطابق أي شيء آخر غير الأرقام.

\t

تطابق مساحة علامة التبويب

\n

تطابق السطر الجديد

ما ورد أعلاه عبارة عن مجموعة من الأحرف التي يمكن استخدامها أثناء مطابقة الأنماط.

دعونا نرى بعض الأمثلة.

خذ بعين الاعتبار موقفًا يقدم فيه المستخدم بعض المدخلات أثناء تنفيذ البرنامج النصي، ونريد التحقق مما إذا كان المستخدم قد أدخل بعض الاسم كمدخل أم لا. يتعين علينا كتابة صيغة تعبير عادية لاستخراج اسمك وطباعتها.

my $userinput="Guru99 Rocks";
if($userinput=~m/.*(Guru99).*/)
{
	print "Found Pattern";
}
else
{
	print "unable to find the pattern";
}

الإخراج:

تم العثور على النمط

هنا، قمنا بكتابة التعبير العادي كـ /.*(Guru99).*/.* يطابق جميع الأحرف في السلسلة. أ '.' تشير مطابقة Perl regex إلى أي حرف بما في ذلك المسافة.

دعونا نرى كيف يمكننا بالضبط إنشاء Regex.

فكر في مثال لسلسلة من الكلمات والأرقام المتعددة والرموز الخاصة مثل "مرحبًا بالجميع، هذا هو رقمي: +91-99298373639"؛

التعبير العادي : /^\w+\s\w+\s\w+\s\w+\s\w+\s\w+\:\+\d+\-\d+/i

مساحة الكلمة مساحة الكلمة مساحة الكلمة مساحة الكلمة مساحة الكلمة حرف خاص : مسافة حرف خاص + أرقام حرف خاص - أرقام.

مباراة بيرل Operaالاختصاصات

يتم استخدام مشغلات المطابقة لمطابقة سلسلة داخل بعض العبارات أو في متغير.

my $var="Hello this is perl";
if($var=~m/perl/)
{
	print "true"; 
} 
else
{
	print "False"; 
}

الإخراج:

صحيح

سيطبع هذا الكود الصغير القيمة "true"، حيث تحدد مطابقة النمط في لغة Perl السلسلة الموجودة في متغير. في الأساس، تبحث لغة Perl عن النص الموجود في // في جميع أنحاء السلسلة، حتى إذا وجدته في مكان واحد فسوف تعيد القيمة "true". يمكن أن يكون النمط في أي مكان في المتغير. يمكننا محاولة استبدال =~ بـ !~ لمعرفة الفرق بين هذين العاملين.

استبدال بيرل Operaتور

يمكن استخدام هذا المشغل للبحث عن أي حرف واستبداله إما بـ null أو بحرف آخر.

my $a="Hello how are you";
$a=~s/hello/cello/gi;
print $a;

الإخراج:

التشيلو كيف حالك

ملاحظة: يمكننا في الواقع استخدام أي سلسلة مطابقة للنمط كما فعلنا سابقًا في عامل الاستبدال هذا أيضًا. هنا استخدمنا "gi"، وg-globally، وi-ignore case.

ترجمة بيرل Operaتور

هذا مشابه للاستبدال، لكنه لا يستخدم أي تعبيرات عادية لـ Perl، بل يمكننا تمرير القيمة أو الكلمة التي نريد استبدالها مباشرة.

my $a="Hello how are you";
$a=~tr/hello/cello/;
print $a;

الإخراج:

مرحبا البقرة أنت

الإدخال/الإخراج لملف بيرل

تم تصميم لغة Perl للتعامل مع الملفات وعمليات الإدخال/الإخراج بشكل فعال. الميزة الرئيسية للغة Perl هي تحليل الملفات ومعالجتها. هناك العديد من الوظائف والمشغلات المضمنة المستخدمة أثناء معالجة الملفات في Perl.

بشكل أساسي، يتم تنفيذ عمليات الملفات التي يتم إجراؤها باستخدام Perl باستخدام FILEHANDLE. يتعين علينا تعريف FILEHANDLE أثناء فتح الملف للقراءة أو الكتابة.

في هذا البرنامج التعليمي لبرنامج Perl النصي، سوف تتعلم-

بيرل فتح الملف

يمكننا فتح ملف باستخدام وظيفة open() المتوفرة في Perl.

open(FILEHANDLE, "filename or complete path of the file");

الآن فتحنا الملف، والآن يطرح السؤال. هل هو للقراءة أو الكتابة؟

ملف قراءة بيرل وملف كتابة بيرل

لدى Perl أوضاع معينة يجب استخدامها لقراءة ملف أو كتابته أو إلحاقه.

Read – open(my $fh,"<filename or complete path of the file"); 
Write – open(my $fh,">filename or complete path of the file");
Append – open(my $fh,">>filename or complete path of the file");

بعض الأمثلة لقراءة ملف:

قراءة الملف في بيرل

لنفترض أن لدينا ملف Perl باسم file.txt ويحتوي على بضعة أسطر من النص. نحتاج إلى فتح هذا الملف وطباعته.

open(FH,"<file.txt"); 
while(<FH>)    # Looping the file contents using the FH as a filehandle. 
{
	print "$_";
}
close FH;

or

open(FH,"<file.txt"); 
my @content=<FH>; # specifying the input of the array is FH.
foreach(@content)
{
	print "$_";
}
close FH;

سيؤدي هذا إلى طباعة محتوى الملف على شاشة الإخراج.

الآن، سوف نكتب برنامجًا لإنشاء البيانات وكتابتها في ملف Perl.

كتابة الملف في بيرل

open(FH,">test.txt");
my $var=<>;
print FH $var;
close FH;

سيؤدي هذا إلى كتابة الإدخال المقدم أثناء وقت التشغيل وإنشاء ملف test.txt الذي سيكون له مدخلات.

ستحاول الطريقة المذكورة أعلاه دائمًا إنشاء ملف باسم test.txt وكتابة الإدخال في الملف؛ سنكتب نفس الشيء لإلحاق الملف.

عملية إضافة ملف في Perl

open(FH,">>test.txt");
my $var=<>;
print FH $var;
close FH;
وسائط الوصف

<

عرض

+<

يقرأ ويكتب

>

ينشئ ويكتب ويقتطع

+>

القراءة والكتابة والإنشاء والاقتطاع

>>

يكتب ويلحق وينشئ

+ >>>

القراءة والكتابة والإلحاق والإنشاء

الآن علينا أن نرى كيفية قراءة الملفات وكتابتها وإلحاقها باستخدام الأمثلة الأساسية.

سنرى المزيد من الأمثلة والوظائف الأخرى التي تساعد في فهم المزيد عن الملفات.

بيرل أخبر

ستعيد هذه الطريقة الموضع الحالي لـ FILEHANDLER بالبايت إذا تم تحديده وإلا فسوف تعتبر السطر الأخير هو الموضع.

open(FH, "test.pl");
while(<FH>)
{
	$a=tell FH;
	print "$a";
}

بيرل سيك

تشبه وظيفة البحث استدعاء النظام fseek. يتم استخدام هذه الطريقة لوضع مؤشر الملف على موقع محدد عن طريق تحديد البايتات متبوعة إما ببداية مؤشر الملف أو نهاية مؤشر الملف.

seek FH, bytes, WHENCE;

WHENCE هو موضع مؤشر الملف للبدء. سيتم تعيينه على الصفر من بداية الملف.

مثال: دع ملف input.txt يحتوي على بعض البيانات مثل "مرحبًا، هذا هو عالمي."

open FH, '+<','input.txt';
seek FH, 5, 0;    # This will start reading data after 5 bytes.
$/ = undef;
$out = <FH>;
print $out;
close FH;

الإخراج:

هذا عالمي

إلغاء ربط بيرل

يتم استخدام إلغاء الارتباط لحذف الملف.

unlink("filename or complete file path");

التعامل مع الدلائل:

يمكننا أيضًا التعامل مع الأدلة التي يمكننا من خلالها التعامل مع ملفات متعددة.

دعونا نرى كيفية فتح الدليل. يمكننا استخدام طريقتي opendir و readdir.

opendir(DIR,"C:\\Program Files\\"); #DIR is the directory handler.

while(readdir(DIR)) # loop through the output of readdir to print the directory contents.
{
   print "$_\n";
}
closedir(DIR); #used to close the directory handler.

or

opendir(DIR,"C:\\Program Files\\");
@content=readdir(DIR);
foreach(@content)
{
	print "$_\n";
}
closedir(DIR);

سيؤدي هذا إلى طباعة كافة الملفات المتوفرة في هذا الدليل.

اختبارات ملف بيرل ومعناها

-r

للتحقق مما إذا كان الملف/الدليل قابلاً للقراءة بواسطة المستخدم/المجموعة الحالية

-w

للتحقق مما إذا كان الملف/الدليل قابلاً للكتابة بواسطة المستخدم/المجموعة الحالية

-x

للتحقق مما إذا كان الملف/الدليل قابلاً للتنفيذ بواسطة المستخدم/المجموعة الحالية

-o

للتحقق مما إذا كان الملف/الدليل مملوكًا للمستخدم الحالي

-R

للتحقق مما إذا كان الملف/الدليل قابلاً للقراءة بواسطة هذا المستخدم/المجموعة الحقيقية

-W

للتحقق مما إذا كان الملف/الدليل قابلاً للكتابة بواسطة هذا المستخدم/المجموعة الحقيقية

-X

للتحقق مما إذا كان الملف/الدليل قابلاً للتنفيذ بواسطة هذا المستخدم/المجموعة الحقيقية

-O

للتحقق مما إذا كان الملف/الدليل مملوكًا لهذا المستخدم الحقيقي

-e

للتحقق من وجود اسم الملف/الدليل

-z

للتحقق من وجود الملف وحجمه صفر (خطأ دائمًا بالنسبة للأدلة)

-f

للتحقق مما إذا كان الإدخال ملفًا عاديًا

-d

للتحقق مما إذا كان الإدخال هو دليل

-l

للتحقق مما إذا كان الإدخال عبارة عن رابط رمزي

-S

للتحقق مما إذا كان الإدخال هو مأخذ توصيل

-p

للتحقق مما إذا كان الإدخال عبارة عن أنبوب مسمى ("FIFO")

-b

للتحقق مما إذا كان الإدخال عبارة عن ملف خاص بكتلة (مثل قرص قابل للتركيب)

-c

للتحقق مما إذا كان الإدخال عبارة عن ملف خاص بالأحرف (مثل جهاز الإدخال/الإخراج)

-u

للتحقق مما إذا كان الملف أو الدليل مضبوطًا

-g

للتحقق مما إذا كان الملف أو الدليل setgid

-k

للتحقق مما إذا كان الملف أو الدليل يحتوي على مجموعة البتات اللاصقة

-t

معالج الملف المحدد هو TTY (كما هو الحال مع وظيفة النظام isatty()، لا يمكن اختبار أسماء الملفات من خلال هذا الاختبار)

-T

للتحقق مما إذا كان الملف يبدو كملف "نصي".

-B

للتحقق مما إذا كان الملف يبدو كملف "ثنائي".

-M

للتحقق من عمر التعديل (المقاس بالأيام) للملف

-A

للتحقق من عمر الوصول (المقاس بالأيام) للملف

-C

للتحقق من عمر تعديل Inode (المقاس بالأيام) للملف

روتين بيرل الفرعي

ما هو الروتين الفرعي؟

روتينات تشبه الوظائف الموجودة في لغات البرمجة الأخرى. لقد استخدمنا بالفعل بعض الوظائف المضمنة مثل الطباعة، والقضم بصوت عالي، والتقطيع، وما إلى ذلك. يمكننا كتابة الإجراءات الفرعية الخاصة بنا في لغة Perl. يمكن كتابة هذه الإجراءات الفرعية في أي مكان في البرنامج؛ من الأفضل وضع الإجراءات الفرعية إما في بداية الكود أو في نهايته.

روتين فرعي في بيرل

مثال على الإجراءات الفرعية

sub subroutine_name 
{
	Statements…;    # this is how typical subroutines look like.
}

الآن بعد أن عرفنا كيفية كتابة روتين فرعي، كيف يمكننا الوصول إليه؟

نحتاج إلى الوصول إلى روتين فرعي أو الاتصال به باستخدام اسم الروتين الفرعي البادئ بالرمز "&".

sub display
{
	print "this is a subroutine";
}
display();    # This is how we call a subroutine

تمرير معلمات Perl ووسائط Perl

تتم كتابة الإجراءات الفرعية أو وظيفة بيرل لوضع التعليمات البرمجية القابلة لإعادة الاستخدام فيها. تتطلب معظم التعليمات البرمجية القابلة لإعادة الاستخدام تمرير المعلمات إلى الروتين الفرعي. هنا، سوف نتعلم كيف يمكننا تمرير الوسائط إلى الروتين الفرعي.

sub display
{		
	my $var=@_; # @_ is a special variable which stores the list of arguments passed.		
	print "$var is the value passed";		
}		
display(2,3,4);    #this is how we need to pass the arguments.

الإخراج:

3 هي القيمة التي تم تمريرها

@_ هو متغير مصفوفة خاص يقوم بتخزين الوسائط التي تم تمريرها إلى الإجراءات الفرعية.

بيرل Shift

يمكننا أيضًا استخدام الكلمة الأساسية "shift" التي تحول معلمة واحدة في كل مرة إلى متغير أو $_[0],$_[1]… وهو عنصر فردي من المصفوفة @_

sub display
{		
my $var=shift;		
print "$var is passed";		
}		
display("hello");

الإخراج:

مرحبا تم تمريره

عادةً ما يتم استخدام الإجراءات الفرعية في البرمجة الموجهة للكائنات وأيضًا في الأماكن التي قد يكون لديك فيها المزيد من التعليمات البرمجية القابلة لإعادة الاستخدام ليتم وضعها.

الوظيفة الرئيسية للروتينات الفرعية هي القيام ببعض المهام وإرجاع نتيجة الكود القابل لإعادة الاستخدام.

دروس PERL للمبتدئين - الدليل الكامل

يمكننا إرجاع قيمة من الروتين الفرعي باستخدام الكلمة الأساسية return.

sub add
{
my $a=shift;
my $b=shift;
return($a+$b);
}
my $result=add(5,6);
print $result;

الإخراج:

11

ستحتفظ $result بقيمة $a و$b المضافة.

يمكننا أيضًا تمرير التجزئة والمصفوفة مباشرة إلى الروتين الفرعي.

sub hash
{
my %hash=@_;
print %hash;
}
%value= ( 1=>'a', 2=>'b');
&hash(%value);

الإخراج:

1a2b

يمكننا أيضًا إرجاع تجزئة أو مصفوفة.

sub hashArray
{
my %hash=@_;
print "Inside Sub-routine";
print %hash;
return(%hash);
}
%hash=(1=>'a', 2=>'b');
my(@ret)=hashArray(%hash);
print "After Sub-routine call";
print @ret;

الإخراج:

داخل الروتين الفرعي2b1aبعد مكالمة الروتين الفرعي2b1a

تنسيق بيرل

تحتوي لغة Perl على آلية يمكننا من خلالها إنشاء التقارير. وباستخدام هذه الميزة، يمكننا إنشاء التقارير بالطريقة التي نريدها تمامًا أثناء الطباعة على شاشة الإخراج أو في ملف. ويمكن كتابة تنسيق بسيط باستخدام وظائف printf أو sprintf المتوفرة في Perl.

printf "%05d\n", 30;

سيتضمن ذلك وضع الأصفار أمام الرقم 30 مما يجعل إجمالي عدد الأرقام 5. ويمكن استخدام نفس الشيء بالنسبة لـ sprintf.

sprintf "%05d\n", 30; # This will print the same as printf.

باستخدام printf وsprintf، يمكننا الحصول على أغلب تنسيقات Perl. وفي حالة التقارير، سيكون من الصعب تنفيذ ذلك.

تنسيق بيرل

مثال على التقرير:

================================================== =========================
الاسم العنوان العمر الهاتف
================================================== =========================
Krishna تشيناي 24 929309242
شروثي تشيناي 24 929309232

ما ورد أعلاه هو مثال على التقارير التي نحتاج إلى طباعتها بنفس الطريقة في Perl. ويمكن تحقيق ذلك باستخدام perl printf وperl sprintf. ويمكن تنفيذ ذلك بفعالية باستخدام format.

يمكن الإعلان عن التنسيق بالطريقة التالية.

format FORMATNAME=FORMATLIST.

سنستخدم هنا طريقة معينة للكتابة لطباعة البيانات على شاشة الإخراج أو في الملف.

رمز الوصف

@

تستخدم لتمثيل بداية صاحب الحقل

>

المحاذاة الصحيحة للنص

<

محاذاة النص إلى اليسار

|

محاذاة للوسط

#

رقمي إذا تم توفير عدة #. يُفترض أنه تعليق إذا تم توفير رقم مفرد

.

العلامة العشرية

^

يمكن أيضًا استخدام بداية حامل الحقل للأسطر المتعددة وأيضًا لالتفاف الكلمات

~

يجب أن يكون السطر فارغًا إذا كان المتغير فارغًا

@*

خطوط متعددة.

($name,$addr,$age,$phone)=("krishna","chennai","24","929309242"); 
write;
($name,$addr,$age,$phone)=("shruthi","chennai","24","929309232"); 
write; 
format STDOUT_TOP= 
=============================================================== 
NAME ADDRESS AGE PHONE 
===============================================================
 . 
format STDOUT= 
@<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<< 
$name, $addr, $age, $phone 
.

قم بتنفيذ الكود لرؤية الإخراج.

نحن نستخدم الرمز @ لتحديد بداية حامل الحقل أو السلسلة، '<' لكل حرف.

نحن نستخدم STDOUT للطباعة على الإخراج القياسي. يمكننا تغيير هذا إلى معالج الملفات الذي نستخدمه لكتابة البيانات في الملف.

open(REPORT,">test.txt"); 
($name,$addr,$age,$phone)=("krishna","chennai","24","929309232"); 
write REPORT; 
($name,$addr,$age,$phone)=("shruthi","chennai","24","929309232"); 
write REPORT; 
format REPORT_TOP= 
=============================================================== 
NAME ADDRESS AGE PHONE 
===============================================================
 . 
format REPORT= 
@<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<< 
$name, $addr, $age, $phone

يمكننا استبدال '<' بـ '>' أو '|' لتغيير محاذاة النص. يتم استخدام STDOUT_TOP لتصميم رأس التنسيق. يمكننا أيضًا استخدام نفس الشيء مع معالج الملفات باستخدام FH_TOP (FH هو معالج الملف). سيؤدي هذا إلى إخراج التنسيق إلى الملف الذي نعمل عليه على.

معايير ترميز بيرل

سيكون لكل مبرمج حسه الخاص في كتابة الكود باستخدام معايير معينة؛ يجب أن تكون هذه المعايير مألوفة بدرجة كافية حتى يتمكن المبرمجون الآخرون من فهم الكود ودعمه بشكل صحيح.

معايير الترميز في بيرل

معايير الترميز في بيرل

كتابة التعليمات البرمجية بسيطة وسهلة. تنشأ المشكلة عندما تحتاج إلى صيانة في المراحل اللاحقة. يجب اتباع الإرشادات ومعايير الترميز المناسبة أثناء كتابة التعليمات البرمجية. تحدد Perl أيضًا معايير معينة ستكون مفيدة للمبرمجين لكتابة التعليمات البرمجية. يُنصح بتحميل وحدة "strict" و"warnings" أثناء كتابة التعليمات البرمجية. كل من هذه الوحدات لها أهميتها الخاصة. ستجعلنا Strict نعلن عن المتغير قبل استخدامه وستخبرنا أيضًا ما إذا كانت أي كلمة عارية موجودة في التعليمات البرمجية الخاصة بك. يمكن استخدام وحدة "Warnings" بدلاً من ذلك عن طريق تمرير خيار "-w" إلى مفسّر Perl في shebang. ستتم طباعة التحذيرات على شاشة الإخراج.

#!/usr/bin/perl –w

فيما يلي بعض قوائم المعايير.

  • استخدم الوحدة "الصارمة" و"التحذيرات".
  • قم بإزالة المتغير غير المستخدم.
  • يجب أن تكون أسماء المتغيرات مفهومة للمستخدمين الآخرين. على سبيل المثال: $name، @fileData وما إلى ذلك.
  • التوثيق مطلوب أثناء ترميز البرنامج النصي.
  • لا تقم بترميز أي قيم، بل حاول جلبها ديناميكيًا أو اطلب من المستخدم إدخالها أثناء وقت التشغيل. (مسار الملف، أسماء الملفات).
  • تعظيم إعادة استخدام التعليمات البرمجية. حاول وضع الكود القابل لإعادة الاستخدام في الإجراءات الفرعية.
  • يجب إعطاء الأسماء الكاملة للإجراءات الفرعية.
  • تحتاج الإجراءات الفرعية إلى كتابتها مع التعليقات والوثائق المناسبة.
  • قم دائمًا بتهيئة المتغيرات.
  • تحقق دائمًا من رموز الإرجاع لمكالمات النظام. قد يتم أو لا يتم فتح ملف، فوجود رمز الإرجاع هنا سيعرض حالة الخطأ إذا كان الملف غير موجود.

    على سبيل المثال: مفتوح (FH،

  • يجب أن يقوم الروتين الفرعي دائمًا بإرجاع قيمة.
  • فتح مجعد في نفس الخط.
  • يمكن وضع BLOCK ذو السطر الواحد في سطر واحد مجعد.
  • استخدم التسميات أثناء الحلقات، سيكون من السهل الخروج من الحلقة كلما كان ذلك ضروريًا.
  • استخدم الشرطة السفلية أثناء كتابة العبارات الطويلة من الكلمات كاسم متغير أو روتين فرعي.
  • حاول استخدام التعبير العادي البسيط أثناء البرمجة.

مثال مثالي لمعايير الترميز:

#######################################################################
Program to read the file content
# Date: 22-2-2013
# Author : Guru99
########################################################################
#!/usr/bin/perl 
use strict;
use warnings; 
my $line;
open FR, "file.txt" || die("Cannot open the file $!");
while ($line=<FR>) 
{   
	print $line;
} # Looping file handler to print data

معالجة أخطاء بيرل

ما هو الاستثناء؟

الاستثناء هو الحدث الذي يحدث أثناء تنفيذ البرنامج والذي سيؤدي إلى تعليق البرنامج أو إنهائه.

معالجة الأخطاء

معالجة الأخطاء هي إحدى الأمور التي يجب على كل مبرمج الاهتمام بها أثناء البرمجة. يوفر Perl أيضًا تقنيات معالجة الأخطاء التي يمكننا من خلالها محاصرة الخطأ والتعامل معه وفقًا لذلك.

معالجة الأخطاء في بيرل

معالجة الأخطاء في بيرل

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

ما الذي سيعود في حالة مكالمات النظام؟

في حالة استدعاءات النظام، سيتم تخزين حالة الإرجاع في متغيرين خاصين $؟ و$!

$! - سيؤدي هذا إلى التقاط رقم الخطأ أو رقم الخطأ المرتبط برسالة الخطأ.

$؟ - سيحتفظ هذا بوظيفة نظام حالة الإرجاع ().

استخدام عامل Perl أو المنطق

يمكننا استخدام عامل منطقي أو عامل لمعالجة الأخطاء أثناء استخدام مكالمات النظام.

مثلا:

open(FH,"<test.txt");

سيؤدي هذا إلى فتح الملف في وضع القراءة إذا كان الملف موجودًا.

ماذا لو كان الملف مفقودا؟

open(FH,"<test.txt") or die("File not exists $!"); # This will perl exit the program if the file not exists. 
open(FH,"<test.txt") or warn ("File not exists $!"); # This will print a warning message on STDERR

تقييم بيرل

يمكن لوظيفة Eval التعامل مع الأخطاء الفادحة وأخطاء وقت الترجمة وأخطاء وقت التشغيل وتلك الأخطاء التي تؤدي إلى إنهاء التعليمات البرمجية الخاصة بك في وقت ما.

يمكن أن تحتوي وظيفة Perl Eval على كتلة من التعليمات البرمجية أو التعبير. يعتبر Evals كل شيء يوضع فيه بمثابة سلسلة.

ضع في اعتبارك حالة استدعاء روتين فرعي لم يتم تعريفه في البرنامج النصي. في هذه الحالة، ينتهي البرنامج النصي بالإشارة إلى "روتين فرعي غير محدد &XYZ، يمكن معالجة هذا الخطأ في وظيفة التقييم.

هناك العديد من استخدامات كتلة التقييم؛ أحد هذه الاستخدامات هو عندما نريد تحميل الوحدة النمطية الخاصة بنظام التشغيل أثناء وقت التشغيل.

على سبيل المثال: القسمة على صفر تؤدي إلى خطأ فادح؛ للتعامل مع هذا يمكننا وضع الكود في كتلة التقييم.

$a=5; 
$b=0; 
eval 
{ 
 '$result=$a/$b'; 
} 
if($@)
{
 print "$@";    # All the error codes returned by evals will get stored in $@. 
}

الإخراج:

خطأ في بناء الجملة في السطر 8 من C:\Users\XYZ\Text.pl، بالقرب من ")

{"

تم إحباط تنفيذ C:\Users\XYZ\Text.pl بسبب أخطاء في الترجمة.

مثال: التقييم باستخدام عبارة Perl die.

sub test 
{ 
die "Dieing in sub test \n"; 
} 
eval 
{ 
test(); 
}; 
print "Caught : $@\n";

الإخراج:

اشتعلت: يموت في الاختبار الفرعي

باستخدام بيرل حاول

لا تدعم لغة Perl كتل المحاولة والالتقاط وأخيرًا التعليمات البرمجية مثل لغات البرمجة الأخرى. لا يزال بإمكاننا استخدامها عن طريق تحميل وحدة Perl خارجية.

استخدم حاول::Tiny؛

باستخدام هذا يمكننا وضع الكود الخاص بك في كتلة المحاولة واكتشاف الخطأ في كتلة التحذير.

بدلاً من $@ المستخدم في eval حاول::Tiny يستخدم $_.

# التعامل مع الأخطاء باستخدام معالج الالتقاط

try 
{ 
die "Die now"; 
} 
catch 
{ 
warn "caught error: $_"; # not $@ 
};

باستخدام أخيرا.

my $y;
try 
{ 
 die 'foo' 
}
finally 
{ 
    $y = 'bar' 
};

try 
{ 
    die 'Die now' 
} 
catch 
{ 
    warn "Returned from die: $_" 
} 
finally 
{ 
    $y = 'gone' 
};

الإخراج:

foo في C:\Users\XYZ\Text.pl السطر 4.

يمكننا استخدام المحاولة والالتقاط والأخير بهذه الطريقة.

حاول { # بيان }

قبض على {# بيان}

أخيرا { # بيان }؛

Or

try 
{ 
# statement 
} 
finally 
{ 
# statement 
};

الإخراج:

Or

try 
{ 
# statement 
} 
finally 
{ 
# statement 
} 
catch 
{ 
# statement 
};

الإخراج:

برمجة بيرل سوكيت

ما هو المقبس؟

دروس PERL للمبتدئين - الدليل الكامل

يعتبر المقبس وسيلة يمكن من خلالها لجهازي كمبيوتر التفاعل على الشبكة باستخدام عنوان الشبكة والمنافذ.

لنفترض أن A (الخادم) وB (العميل) هما نظامان يجب أن يتفاعلا مع بعضهما البعض باستخدام المقابس لتشغيل بعض البرامج.

لتنفيذ ذلك، نحتاج إلى إنشاء مآخذ توصيل في كل من A (الخادم) وB (العميل)، وسيكون A في حالة الاستقبال وسيكون B في حالة الإرسال.

الخادم):

هنا، يرغب الخادم في تلقي اتصال من B (العميل) وتنفيذ بعض المهام وإرسال النتيجة مرة أخرى إلى B (العميل). عندما ننفذ التعليمات البرمجية، يحاول نظام التشغيل في A إنشاء مقبس ويربط منفذًا واحدًا بهذا المقبس. بعد ذلك، سيستمع من المرسل وهو B.

ب (العميل).

هنا يرغب العميل في إرسال بعض البرامج من نظامه إلى A (الخادم) لإجراء بعض المعالجة. عندما نقوم بتنفيذ التعليمات البرمجية، يحاول نظام التشغيل في B إنشاء مقبس للتواصل مع A (الخادم)، يجب على B تحديد عنوان IP ورقم المنفذ A الذي يرغب B في الاتصال به.

إذا سارت الأمور على ما يرام، فسوف يتفاعل كلا النظامين لتبادل المعلومات من خلال منفذ واحد. يدعم Perl أيضًا برمجة المقبس.

لدى Perl واجهة برمجة تطبيقات أصلية يمكن من خلالها تنفيذ المقابس. لتسهيل الأمر، هناك العديد من وحدات CPAN التي نكتب بها برامج المقبس.

عمليات الخادم:

  • إنشاء المقبس
  • ربط المقبس بالعنوان والمنفذ
  • استمع إلى المقبس الموجود على عنوان المنفذ هذا
  • اقبل اتصالات العميل التي تحاول الاتصال باستخدام المنفذ وIP الخاص بالخادم
  • يجري عمليات

العميل Operaنشوئها:

  • إنشاء المقبس
  • الاتصال بالخادم باستخدام عنوان المنفذ الخاص به
  • يجري عمليات

خادم العميل Operaالاتصالات في بيرل

مقبس

هذه وحدة واحدة لبرمجة المقبس، والتي تعتمد على البرمجة الشيئية. لا تدعم هذه الوحدة نوع شبكة INET المستخدم في الشبكات.

الإدخال::المقبس::INET:

تدعم هذه الوحدة مجال INET وهي مبنية على IO::Sockets. جميع الطرق المتوفرة في IO::Sockets موروثة في وحدة INET.

العميل والخادم باستخدام بروتوكول TCP:

TCP هو بروتوكول موجه للاتصال. سوف نستخدم هذا البروتوكول لبرمجة المقبس.

قبل المتابعة، دعونا نرى كيف يمكننا إنشاء كائن لوحدة IO::Socket::INET وإنشاء مقبس.

$socket = IO::Socket::INET->new(PeerPort => 45787, 
PeerAddr => inet_ntoa(INADDR_BROADCAST), 
Proto => udp,LocalAddr => 
'localhost',Broadcast => 1 )
or 
die "Can't create socket and bind it : $@n";

تقبل الطريقة الجديدة في وحدة IO::Socket::INET التجزئة كمعلمة إدخال إلى الروتين الفرعي. تم تحديد هذا التجزئة مسبقًا، ونحتاج فقط إلى توفير القيم للمفاتيح التي نريد استخدامها. توجد قائمة بالمفاتيح المستخدمة بواسطة هذا التجزئة.

عنوان النظير

عنوان المضيف البعيد

بيرهوست

مرادف لـ PeerAddr

بيربورت

المنفذ أو الخدمة البعيدة

عنوان محلي

عنوان ربط المضيف المحلي

مؤسسة الكوثر

مرادف لـ LocalAdr

ميناء محلي

منفذ ربط المضيف المحلي

بروتو

اسم البروتوكول (أو الرقم)

النوع

نوع المقبس

استمع

حجم قائمة الانتظار للاستماع

إعادة الاستخدام

قم بتعيين SO_REUSEADDR قبل الربط

إعادة استخدام

قم بتعيين SO_REUSEADDR قبل الربط

ReusePort

قم بتعيين SO_REUSEPORT قبل الربط

بث

قم بتعيين SO_BROADCAST قبل الربط

مهلة

قيمة مهلة زمنية لعمليات مختلفة

متعدد هومد

جرب كافة العناوين للمضيفين متعددي طرق الاتصال

حجب

تحديد ما إذا كان الاتصال سيكون في وضع الحظر

Server.pl

use IO::Socket; 
use strict; 
use warnings; 
my $socket = new IO::Socket::INET ( 
LocalHost => 'localhost', 
LocalPort => '45655', 
Proto => 'tcp', 
Listen => 1, 
Reuse => 1, 
); 
die "Could not create socket: $!n" unless $socket; 
print "Waiting for the client to send datan"; 
my $new_socket = $socket->accept(); 
while(<$new_socket>) { 
print $_; 
} 
close($socket);

Client.pl

use strict; 
use warnings; 
use IO::Socket; 
my $socket = new IO::Socket::INET ( 
PeerAddr => 'localhost', 
PeerPort => '45655', 
Proto => 'tcp', 
); 
die "Could not create socket: $!n" unless $socket; 
print $socket "Hello this is socket connection!n"; 
close($socket);

ملحوظة:

في برمجة المقبس، سيتعين علينا تنفيذ Server.pl أولاً ثم Client.pl بشكل فردي في موجهات أوامر مختلفة إذا كنا نعمل على مضيف محلي.

ما هي وحدات وحزم بيرل

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

ما هي وحدات بيرل؟

سيتم تثبيت الوحدات القياسية أثناء تثبيت Perl على أي نظام. CPAN: لغة بيرل الشاملة Archive Network – مستودع عالمي لوحدات Perl. وحدات Perl المخصصة الخاصة بنا والتي يمكن كتابتها بواسطتنا. في الأساس، الوحدة عند تحميلها في أي برنامج نصي ستقوم بتصدير كافة المتغيرات العامة والإجراءات الفرعية الخاصة بها. يمكن لهذه الإجراءات الفرعية الاتصال مباشرة كما لو تم الإعلان عنها في البرنامج النصي نفسه. يمكن كتابة وحدات Perl بامتداد .pm لاسم الملف على سبيل المثال: Foo.pm. يمكن كتابة الوحدة النمطية باستخدام "package Foo" في بداية البرنامج.

وحدة بيرل الأساسية:

#!/usr/bin/perl 
package Arithmetic; 
sub add 
{ 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a+$b);
} 
sub subtract 
{ 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a-$b); 
} 
1;

لا يوجد إخراج

لاستخدام وحدة Perl هذه، علينا وضعها في دليل العمل الحالي.

يمكننا تحميل وحدة Perl باستخدام الطلب أو استخدامها في أي مكان في الكود. الفرق الرئيسي بين الطلب والاستخدام هو طلب الوحدة المحملة أثناء وقت التشغيل واستخدام التحميل أثناء وقت الترجمة.

#!/usr/bin/perl
require
Arithmetic;
print Arithmetic::add(5,6);
print Arithmetic:: subtract (5,6);

هنا، في المثال أعلاه، نقوم بالوصول إلى الإجراءات الفرعية باستخدام اسم الوحدة المؤهل بالكامل.

يمكننا أيضًا الوصول إلى الحزمة باستخدام "استخدام الحساب".

مصدر:

تحتوي هذه الوحدة على وظيفة افتراضية لطرق الاستيراد.

#!/usr/bin/perl 
package Arithmetic; 
require Exporter; 
@ISA= qw(Exporter); # This is basically for implementing inheritance. 
@EXPORT = qw(add); 
@EXPORT_OK = qw(subtract); 
sub add 
{ 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a+$b); 
} 
sub subtract 
{ 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a-$b);
 } 
1;

يمكن استخدام مجموعة @EXPORT لتمرير قائمة من المتغيرات والإجراءات الفرعية التي سيتم تصديرها افتراضيًا إلى المتصل بالوحدة النمطية.

يمكن استخدام مصفوفة @EXPORT_OK لتمرير قائمة بالمتغيرات والإجراءات الفرعية التي سيتم تصديرها على أساس الطلب، حيث يتعين على المستخدم تحديدها أثناء تحميل الوحدة.

#!/usr/bin/perl 
use 
Arithmetic qw(subtract); 
print add(5,6); 
print subtract (5,6);

افتراضيًا، سيتم تصدير إضافة روتين فرعي. لن يتم تصدير طريقة الطرح إذا لم يتم تحديدها أثناء تحميل الوحدة.

البرمجة الشيئية في بيرل

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

إنشاء فئة

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

منشئ بيرل

المُنشئ في Perl هو طريقة ستنفذ وتعيد لنا مرجعًا باسم الوحدة الموسومة بالمرجع. وهذا ما يسمى بمباركة الفصل. نحن نستخدم متغيرًا معينًا لمباركة فئة Perl، وهو Bless.

#!/usr/bin/perl 
package Arithmetic; 
sub new 
{ 
my $class=shift;
my $self={}; 
bless $self, $class; 
return $self; 
} 
sub add 
{ 
my $self= shift; 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a+$b); 
}
sub subtract 
{ 
my $self= shift; 
my $a=$_[0]; 
my $b=$_[1]; 
return ($a-$b); 
} 
1;

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

#!/usr/bin/perl
use Arithmetic;
my $obj= Arithmetic->new(); 
my $result= $obj->add(5,6); 
print "$result";
$result = $obj->subtract(6,5);
print "$result";

هنا، علينا أن نفهم كيف تم إنشاء الكائن. عندما نحاول إنشاء كائن للفئة، نحتاج إلى استخدام الاسم الكامل للفئة. لنفترض أنه إذا كانت فئة Perl موجودة في بعض lib\Math\Arithmetic.pm. وإذا أردنا الوصول إلى فئة Perl هذه من دليل lib، فيجب علينا توفير المسار الكامل للفئة أثناء استدعاء البرنامج النصي.

استخدم lib::Math::Arithmetic;

my $obj = lib::Math::Arithmetic->new();

هذه هي الطريقة التي يتم بها إنشاء الكائن في Perl.

@شركة:

كيف يعرف برنامج Perl النصي مكان وجود وحدة المكتبة؟ يعرف Perl فقط الدليل الحالي للبرنامج النصي ومسار مكتبة Perl المدمج. عندما نستخدم وحدة Perl غير الموجودة في الدليل الحالي أو مسار مكتبة Perl، فسوف يفشل البرنامج النصي دائمًا. حول INC، هذه مصفوفة تحتوي على جميع مسارات الدليل حيث يجب عليها البحث عن وحدات Perl. حاول تنفيذ هذا الأمر وانظر ماذا سيكون الناتج.

perl –e "print @INC"

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

push(@INC, "PATH TO YOUR MODULE");

اجعل هذا بمثابة السطر الأول من التعليمات البرمجية. سيخبر هذا مترجمك الفوري بالنظر في هذا المسار. أو تستخدم

lib Arithmetic; # List here is your Perl Module location

بيرل المدمر

يتم استدعاء مدمر الكائن بشكل افتراضي في النهاية وقبل خروج البرنامج النصي الخاص بك. يستخدم هذا لتدمير الأشياء الخاصة بك من الذاكرة.


بيرل V/s شل البرمجة النصية

مقدمة إلى برمجة PERL

  • البرمجة بلغة Perl لا تسبب مشكلات في قابلية النقل، وهو أمر شائع عند استخدام أصداف مختلفة في البرمجة النصية للقذيفة.
  • معالجة الأخطاء سهلة للغاية في لغة Perl
  • يمكنك كتابة برامج طويلة ومعقدة باستخدام لغة Perl بسهولة نظرًا لحجمها الهائل. وهذا على النقيض من Shell الذي لا يدعم مساحات الأسماء والوحدات النمطية والكائنات والوراثة وما إلى ذلك.
  • لدى Shell عدد أقل من المكتبات القابلة لإعادة الاستخدام. لا شيء مقارنة بـ CPAN الخاص بـPerl
  • شل أقل أمانا. إنها تستدعي وظائف خارجية (أوامر مثل mv وcp وما إلى ذلك تعتمد على الصدفة المستخدمة). على العكس من ذلك، يقوم Perl بعمل مفيد أثناء استخدام الوظائف الداخلية.

كيف يتم استخدام PERL في اختبار الأتمتة

يستخدم بيرل على نطاق واسع في الأتمتة. قد لا تكون أفضل لغات البرمجة في العالم ولكنها الأنسب لأنواع معينة من المهام. دعونا نناقش أين ولماذا يتم استخدام لغة Perl اختبار الأتمتة.

اختبار التخزين

اختبار التخزين باستخدام بيرل

ما هو التخزين؟ البيانات المخزنة في الملفات.

لنفترض أن لدينا تخزينًا متعلقًا حالة الاختبار حيث يتعين علينا كتابة البيانات على قسم واحد وقراءتها والتحقق من كتابة البيانات بشكل صحيح.

يمكن القيام بذلك يدويًا، ولكن هل يمكن للاختبار اليدوي إجراء نفس الشيء 10000 مرة؟ سيكون كابوسا! نحن بحاجة إلى الأتمتة

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

لماذا نحتاج إلى اختبار التخزين؟ فكر في مراكز البيانات الضخمة حيث تتدفق البيانات باستمرار من نظام إلى آخر مع تخزين آلاف السجلات في الثانية. يعد اختبار قوة آلية التخزين هذه أمرًا ضروريًا.

والعديد من الشركات مثل HP وDell IBM ويستخدم العديد من مصنعي الخوادم لغة Perl كواجهة لاختبار الوظائف في مجالات التخزين والشبكات. NetApp هي إحدى هذه الشركات التي تعمل بشكل كامل على التخزين وتستخدم لغة Perl كلغة برمجة لأتمتة حالات الاختبار.

إذا كنت مهتمًا بـ Perl Automation، فمن المستحسن التعرف على التخزين والشبكات Concepts.

اختبار الخادم والشبكة:

اختبار الخادم والشبكة باستخدام لغة Perl

اختبار الخادم والشبكة باستخدام لغة Perl

يستخدم PERL على نطاق واسع في وقت تشغيل الخادم ومراقبة الأداء.

خذ بعين الاعتبار مركز بيانات يحتوي على 100 مضيف (خادم). مطلوب منك الاتصال بكل مضيف، وتنفيذ بعض الأوامر عن بعد. أنت أيضًا تريد إعادة تشغيل النظام والتحقق من وقت اتصاله بالإنترنت مرة أخرى.

سيكون القيام بهذه المهمة يدويًا لجميع المضيفين المائة بمثابة كابوس. ولكن يمكننا بسهولة أتمتة هذا باستخدام لغة PERL

خطوات التصميم لتحقيق هذه الأتمتة المذكورة أعلاه باستخدام PERL

  1. أخذ مدخلات من ملف حول معلومات المضيف مثل (IP واسم المستخدم وكلمة المرور).
  2. استخدم Net::SSH2 للاتصال بكل نظام وإنشاء قناة لتنفيذ الأوامر.
  3. تنفيذ مجموعة الأوامر المطلوبة على سبيل المثال: ls، dir، ifconfig،ps إلخ.
  4. إعادة تمهيد النظام.
  5. انتظر لمدة 10 دقائق حتى يظهر النظام.
  6. قم باختبار اتصال النظام باستخدام وحدة Net::Ping وطباعة الحالة.

سنقوم بترميز السيناريو أعلاه.

لنأخذ ملفًا يسمى Input.txt والذي سيخزن المعلومات الكاملة حول جميع الأجهزة المضيفة التي نحتاج إلى الاتصال بها وتنفيذ الأمر.

الإدخال.txt

192.168.1.2 كلمة مرور الجذر

192.168.1.3 كلمة مرور الجذر

192.168.1.4 الجذر root123

HostCheck.pl

use Net::SSH2;
use Net::Ping;
use strict;
use warnings;
my $ping = Net::Ping->new();    # Creating object for Net::Ping
my $SSHObj = Net::SSH2->new();  #Creating object for Net::SSH2
open( FH, "Input.txt" );        # Opening file and placing content to FH
my @hosts = <FH>;
my $ip;
my @ips;
foreach (@hosts)
{
    if ( $_ =~ /(.*)\s+(\w+)\s+(.*)/ )    #Regex to get each info from file
    {
        $ip = $1;
        my $user = $2;
        my $password = $3;
        $SSHObj->connect($ip);
        print "Connecting to host -- $ip --Uname:$user --Password:$password\n";
        my $status = $SSHObj->auth_password( $user, $password );
        print "$status\n";
        die("unable to establish connection to -- $ip") unless ($status);
        my $shell = $SSHObj->channel();
        print "$_\n" while <$shell>;
        $shell->blocking(1);
        $shell->pty('tty');
        $shell->shell();
        sleep(5);
        #Executing the list of command on particular host. Can be any command
        print $shell "ls \n";
        print "$_\n" while <$shell>;
        print $shell "ps \n";
        print "$_\n" while <$shell>;
        print $shell "dir \n";
        print "$_\n" while <$shell>;
        print $shell "init 6\n";    #rebooting the system
        push( @ips, $ip );
    }
}
sleep 600;
foreach (@ips)
{
    if ( $ping->ping($_) )
    {
        print "$_ is alive.\n" if $ping->ping($_);
    }
    else
    {
        print "$_ is not still up --waiting for it to come up\n";
    }
}

اختبار الويب

لا يقتصر Perl على اختبار التخزين والشبكة فقط. يمكننا أيضًا إجراء اختبار على الويب باستخدام PERL. WWW-ميكانيكية هي وحدة واحدة تستخدم ل اختبار الويب. في الأساس، لن يقوم بتشغيل أي متصفح لاختبار وظائف تطبيقات الويب، بل يستخدم الكود المصدري لصفحات html.

يمكننا أيضًا إجراء اختبار يعتمد على المتصفح باستخدام Selenium IDE، RC، برنامج تشغيل الويب. بيرل مدعوم ل Selenium.

\ن"؛ #this سيحتفظ بالسلسلة المتبقية بعد الانتهاء من مطابقة الطقطقة.
مطبعة "