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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الإخراج:

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

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

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

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

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

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

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

مزايا بيرل

عيوب بيرل

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

هيا بنا نبدأ

مع المعرفة الكافية بتاريخ لغة 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 Archive Network) أو إما PPM الذي يعمل فقط مع Perl windows. لكن هذه الملفات ليست إلزامية لبدء البرمجة بلغة Perl.

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

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

Hello world!

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

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

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

#!/usr/bin/perl		

هذا يخبر نظام التشغيل بتنفيذ هذا الملف باستخدام البرنامج الموجود في /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 ناقص

الوحدات عبارة عن مجموعة من الرموز المستخدمة للقيام بالمهام التي تؤدي عمليات شائعة في العديد من البرامج. إذا كنت تستخدم وحدات Perl، فلن تحتاج إلى إعادة كتابة الرموز لإجراء نفس العملية. يمكن لـ Perl الاستفادة من مكتبات الأكواد الخارجية هذه. واحدة من أفضل المكتبات هي CPAN. إنها تعني لغة بيرل الشاملة Archive Network ويحتوي على عدد كبير من وحدات Perl التي يمكنك استخدامها. إنه مجتمع أو شبكة تضم عددًا كبيرًا من المطورين الذين يساهمون بمثل هذه الوحدات. من خلال تثبيت الدعم لوحدات CPAN في وحدة Perl الخاصة بك، يمكنك الاستفادة من وحدات CPAN وتسهيل عملك. معظم وحدات Perl مكتوبة بلغة Perl، وبعضها يستخدم XS (مكتوبة بلغة C) لذا تتطلب مترجم C (من السهل الحصول على هذا الإعداد - لا داعي للذعر. قد يكون للوحدات تبعيات على وحدات أخرى (دائمًا تقريبًا على CPAN) و لا يمكن تثبيتها بدونها (أو بدون إصدار محدد منها). من المفيد قراءة الوثائق الخاصة بالخيارات أدناه بدقة. تتطلب العديد من الوحدات النمطية في CPAN الآن إصدارًا حديثًا من Perl (الإصدار 5.8 أو أعلى). قم بتثبيت برنامج نصي cpanminus الحصول على الوحدات النمطية وتفكيكها وبناءها وتثبيتها من CPAN لتسهيل تثبيت الوحدات الأخرى (ستشكرنا later). لتثبيت التطبيق 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. أرقام
  2. سلاسل

أرقام:

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

  • الأعداد الصحيحة، إنها ببساطة أعداد صحيحة، مثل 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 بتخزين القيم بنفس التنسيق. سيتم تحويل هذه القيم السداسية العشرية والثنائية والثمانية داخليًا إلى القيم العشرية.

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

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

$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 تُستخدم علامات الاقتباس لإحاطة البيانات التي يجب استكمالها قبل المعالجة. وهذا يعني أن الأحرف والمتغيرات التي تم تجاوزها لا يتم إدخالها حرفيًا later العمليات، ولكن يتم تقييمها على الفور. يمكن استخدام أحرف الهروب لإدراج أسطر جديدة وعلامات التبويب وما إلى ذلك.

أمثلة بيرل:

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

الإخراج:

إنه 7

هنا بسبب double يتم إضافة قيمة علامات الاقتباس $num إلى قيمة $txt

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

غامض\n

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

أمثلة بيرل:

print "hello \n";

الإخراج:

مرحبا

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

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

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

سلاسل متغيرة

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

أمثلة بيرل:

$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" باستخدام "." المشغل أو العامل.

فى النهايه…

التحويل بين الأرقام والسلاسل:

كما تعلم، يقوم Perl تلقائيًا بالتحويل بين الأرقام إلى سلسلة حسب الحاجة. كيف يعرف بيرل ما نحتاجه الآن؟ هذا بسيط - كل شيء يعتمد على المشغل (سنتحدث عن المشغلين later، الآن، فقط اقبل أن هناك الكثير من العوامل، تختلف من حيث الأرقام والسلاسل) إذا كان العامل يتوقع رقمًا، فسيستخدم 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

مصفوفة بيرل

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

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

بلدي @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 أرقام أو أبجديات من الألف إلى الياء في مصفوفة. بدلاً من كتابة جميع الحروف، يمكنك تجربة شيء مثل أدناه –

@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 Push: يضيف عنصر المصفوفة في نهاية المصفوفة الموجودة.
  • Perl Pop: يزيل العنصر الأخير من المصفوفة.
  • Perl 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";

الإخراج:

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

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

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

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

الخامس عند التحول: الإثنين الثلاثاء الأربعاء

تجزئة بيرل

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

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

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

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

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

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

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

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

الإخراج:

سيناث33كريشنا24شروثي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.

الإخراج:

Sainath33Krishna24Shruthi25Sainath33Krishna24Shruthi25

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

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

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 لرموز المثال لمعرفة الفرق.

مشغل بيرل

ما هو المشغل؟

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

العمليات الحسابية:

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

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

+

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

عقد القيم

$س=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

مشغلي التخصيص:

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

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

+=

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

$س=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

العوامل المنطقية والعلائقية:

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

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

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

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

== أو مكافئ

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

!=أو ني

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

> أو جي تي

المشغل يستخدم للتحقق مما إذا كان

أ أكبر من ب

<أو لتر

المشغل يستخدم للتحقق مما إذا كان

أ أقل من ب

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

المشغل يستخدم للتحقق مما إذا كان

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

<= أو لو

المشغل يستخدم للتحقق مما إذا كان

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

|| او او

عامل التشغيل المستخدم للتحقق من أن A أو B يحتفظ بقيمة

&&او و

المشغل المستخدم للتحقق من أن كلاً من 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

يمكنك رؤية أمثلة على العوامل المنطقية في later أقسام.

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

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

المتغيرات الخاصة في لغة 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

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

$$

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

$?

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

مباراة $&$

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

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

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

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

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

$+$LAST_PAREN_MATCH

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

$

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

$[

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

$]

نسخة من بيرل.

$ "

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

$;

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

$!

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

$@

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

$<

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

$>

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

$(

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

$)

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

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

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

$^ج

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

$^ف

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

$^I$INPLACE_EDIT

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

$^م

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

$^O$OSNAME

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

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

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

$^W$تحذير

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

$ARGV

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

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

متغير الوصف

INC

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

ARGV

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

@_

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

@F

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

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

متغير الوصف

٪شركة

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

%ENV

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

%سيج

معالج الإشارات.

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

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

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

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

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

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

  • مباراة بيرل - م //
  • بديل بيرل – 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

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

مشغلي مطابقة بيرل

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

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

الإخراج:

صحيح

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

مشغل استبدال بيرل

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

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

الإخراج:

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

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

مشغل ترجمة بيرل

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

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

الإخراج:

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

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

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

في الأساس، تتم عمليات الملفات التي يتم إجراؤها باستخدام Perl باستخدام 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 وكتابة الإدخال في الملف؛ سنكتب نفس الشيء لإلحاق الملف.

عملية إلحاق الملف في بيرل

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" التي تنقل معلمة واحدة في كل مرة إلى متغير أو $_[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 أو sprintوظائف f المتوفرة في بيرل.

printf "%05d\n", 30;

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

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

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

تنسيق بيرل

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

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

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

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

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 هو معالج الملف). سيؤدي هذا إلى إخراج التنسيق إلى الملف الذي نعمل عليه على.

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

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

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

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

كتابة التعليمات البرمجية بسيطة وسهلة. تنشأ المشكلة عندما تحتاج إلى الصيانة later مراحل. يجب اتباع الإرشادات ومعايير الترميز المناسبة أثناء كتابة الكود. تحدد لغة Perl أيضًا معايير معينة ستكون مفيدة للمبرمجين لكتابة التعليمات البرمجية. يُنصح بتحميل "وحدة التحذيرات الصارمة" و"التحذيرات" أثناء كتابة الكود. كل من هذه الوحدات لها أهميتها الخاصة. Strict سيجعلنا نعلن عن المتغير قبل الاستخدام وسيخبرنا أيضًا ما إذا كانت هناك أي كلمة مجردة موجودة في الكود الخاص بك. يمكن استخدام وحدة التحذيرات بدلاً من ذلك عن طريق تمرير خيار "-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 أيضًا تقنيات معالجة الأخطاء التي يمكننا من خلالها محاصرة الخطأ والتعامل معه وفقًا لذلك.

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

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

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

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

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

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

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

باستخدام عامل بيرل أو منطقي

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

مثلا:

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.

ب (العميل).

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

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

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

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

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

عمليات العميل:

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

عمليات العميل والخادم في بيرل

مقبس

هذه وحدة واحدة لبرمجة المقبس، والتي تعتمد على البرمجة الشيئية. لا تدعم هذه الوحدة نوع شبكة 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
  • يمكنك الكتابة لفترة طويلة وكومplex البرامج على بيرل بسهولة بسبب اتساعها. وهذا على النقيض من Shell التي لا تدعم مساحات الأسماء والوحدات النمطية والكائنات والميراث وما إلى ذلك.
  • لدى Shell عدد أقل من المكتبات القابلة لإعادة الاستخدام. لا شيء مقارنة بـ CPAN الخاص بـPerl
  • شل أقل أمانا. إنها تستدعي وظائف خارجية (أوامر مثل mv وcp وما إلى ذلك تعتمد على الصدفة المستخدمة). على العكس من ذلك، يقوم Perl بعمل مفيد أثناء استخدام الوظائف الداخلية.

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

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

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

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

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

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

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

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

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

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

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

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

اختبار الخادم والشبكة باستخدام لغة 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 وWeb driver. بيرل مدعوم للسيلينيوم.

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