هي رغبة مني لأن أتعلم هذه اللغة و في نفس الوقت أعلمها لكل مبتدئ , و أتمنى أن أجد من يساعدنا في ذلك سواء في تقديم أفكاره و تجربتة مع تعلمه لهذه اللغة , و في نفس الوقت أتمنى أيضا أن نجد من يذكرنا بعيوبنا ان وجدت أخطاء في هذا الدرس أو في الدروس المقبلة ان شاء الله , و اليوم اسمحوا لي بتقديم الدرس الأول و هو عبارة عن درس تطبيقي , و الآن لنبدأ باسم الله ...
لغات البرمجة التفسيرية 1 : هي لغات برمجة يكون البرنامج الناتج عنها عبارة عن ملف يسمى Script و يتم تنفيذه عن طريق برنامج يسمى المفسر الذي يقوم بفك الشفرة الخاصة بالبيانات , و الحصول على المعنى لهذه الصيغة لاستخدامها في الغرض الذي أعدت لأجله حيث يفسره أمرا أمرا و ينفذه واحدا تلو الآخر و ما يميز هذا النوع من اللغات أن نص script لا يتحول الى لغة الالة و انما الى ملف ثنائي² byte code و هو عبارة عن سلسلة من تعليمات لغة الآلة الافتراضية ( VM) , ويكون هناك مفسر يسمى الآلة الإفتراضية يتم استدعاؤه في كل مرة يتم تنفيذ البرنامج فيها حيث يقوم بالتحويل من الآلة الافتراضية إلى الحقيقية. ويكون تنفيذ هذا byte code أسرع من النص script ويعتبر تتبع الأخطاء في اللغات التفسيرية أمرا سهلا لأنها تنفذ سطرا فسطر , و الخلاصة أن البرنامج لا يعمل من دون مفسر على الجهاز الهدف و الأمثلة عديدة بالنسبة لهذا النوع من لغات البرمجة , و من الأمثلة على هذه اللغات bash و perl و python و php التي تتداول برامجها على شكل نصي script وهناك نوع من هذه اللغات python مثلاً يمكنه تحويل النص إلى لغة آلة وهمية افتراضية لكسب المزيد من السرعة ولكن أشهر تلك التي تتداول بشكل ثنائي غير نصي هي جافا java ولغة visual basic على الرغم مما يقال إلا أنها تفسيرية لأن الملف التنفيذي هو عبارة عن ملف يقوم باستدعاء الآلة الإفتراضية msvbvm60.dll مثلاً التي تتابع عملية تفسير البرنامج. وعلى الرغم من كل شيء تظل هذه اللغات بطيئة إلا أنها تمتاز بأنها ستعمل على أي منصة على أي نظام تشغيل إذا وجد المفسر الخاص بها على ذلك النظام وهي فلسفة هكذا لغات "Write once run every where." أي أن تكتبه مرة واحدة وتنفذه أينما كان . وعلى النقيض من ذلك توجد اللغات التي تعطي ملف بلغة الآلة مباشرة مثل لغة C/C++ وتسمى عملية تحويل ملف من الكود المصدر (الملف النصي) إلى لغة الآلة تصنيف compiling ويكون البرنامج الناتج أسرع ما يكون خصوصا إذا كنت تستعمل مصنف gcc الذي يمكنه تحسين optimization أي زيادة سرعة برامجك أو تقليل حجمها ويمكنه استغلال كافة تعليمات معالج معين ولكن لغة C/C++ ليست للهواة. الهدف الأسمى في اللغات التصنيفية الجيدة و القياسية هو تحقيق العبارة الشهيرة "Write once, compile every where." أي أن تكتبه مرة واحدة وتصنفه أينما كان.1- مقدمة من كتاب لينوكس الشامل لمؤلفه : مؤيد السعدي1- اذن ما دام الأمر هكذا فمن أين يمكن أن أحصل على مفسر لغة بيرل :
سؤال جيد بالنسبة لكل من يريد أن يشق طريقه نحو اللغة البسيطة بيرل , الأمر بسيط جدا على منصة لينوكس حيث أن أغلب توزيعاته تكون فيها لغة بيرل مثبتة تلقائيا , ما عليك إلا الدخول إلى الطرفية و اطلب من Bash لغة البيرل بهذا الأمر : perlأما بالنسبة لمستخدمي منصة الويندوز المهمة لم تعد شاقة أيضا , ما عليك إلا أن تقوم أولا بتحميل برنامج ActivePerl من موقعه الرسمي : http://www.activestate.com/Products/ActivePerl / , يجب عليك أن تختار الملف MSI المخصص للويندوز ( الإصدار حاليا ActivePerl-5.10 ). بعد ذلك وإعادة تشغيل النظام , و الذهاب إلى Console DOS و يستحب أن تجرب عليه الأمر التالي : perl –v لتأكد من أن لغة بيرل على ما يرام يطبع على الشاشة معلومات نسختك الحالية , لتحصل على الأتي :
, و ما دامت النتيجة مثل السابق , أقول لك , مبروك عليك اللغة البسيطة PERL , و مرحبا بك في جمهورية البيرل ...
2- نظرة عامة :
في البداية صممت بيرل لادارة نظام التشغيل UNIX حيث دعت الحاجة إلى ابتكار لغة بديلة و قوية عن awk في لينوكس , فما كان من مبتكرها Larry Wall الا أن جعلها لغة قوية جدا في معالجة النصوص و البيانات, ليمنحها التسمية المختصرة P.E.R.L وهي الحروف الأولى من الجملة الانجليزية Practical Extraction and Report Language , و لبيرل اليوم شهرة شعبية حتى أصبحت تستعمل على مستوى أغلبية أنظمة التشغيل ,حيث تعتبر perl إلى جانب ما سبق صندوق لأدوات قوية في العديد من الحالات : ادراة الأنظمة و التحكم بها , و معالجة النصوص ( البريد الالكتروني , الوراثة ) , و برمجة الشبكات ( CGI , mod_perl الخ ) , و قواعد البيانات , و الواجهات الرسومية الخ , لذا يمكنك مقارنتها مع السي في القوة , و basic في البساطة , تعتبر بيرل أيضا لغة من اللغات الكائنية التوجه و هي لغة برمجة عامة قابلة للتطور اذ بمكنها استعمال برامج خارجية تسمى modules لتساعد المبرمجين في جلب وظائف جاهزة , و الآن اسمح للغة البيرل تستعرض لك في إيجاز بعض قوتها في هذا البرنامج الصغير ! :
my @r=qm(A Perl program is 5 times more rapid write );
map {tr/A-Z/a-z/;s/\//g:}@r;
foreach (sort grep !/^$/, @r) { print "$_\n"; }
هذا البرنامج يقوم بجدولة الجملة (A Perl program is 5 times more rapid write ) في قائمة من الكلمات , و يحول الحروف الكبيرة إلى حروف صغيرة , و يمسح الأرقام من القائمة , و يظهر الكلمات حسب ترتيبها الأبجدي حقا بيرل لغة من لغات المستوى الراقي , فهي تحمل معها العديد من مزايا لغات أخرى , و باستطاعتها التحكم في الذاكرة , فلا تنسى أن بيرل لغة جد حساسة لحالة الأحرف (الكبيرة و الصغيرة ) بما يعني أن print هي دالة من دوال اللغة أما Print فلن تقرأ ! . لكن مهلا ! باستطاعتك الكتابة كيف ما شئت لتعريف ( المتغيرات , الدوال , و الملفات ) .map {tr/A-Z/a-z/;s/\//g:}@r;
foreach (sort grep !/^$/, @r) { print "$_\n"; }
3- الفصل الأول :
1 – 1 تنفيذ البرنامج الأول في بيرل :من الطرق التقليدية لكتابة أول برنامج بيرل , هو أن تفتح أي محرر نصوص ASCII , و تكتب بداخله التعليمات البرمجية التالية :
my $a="salem alikom\n";
print $a; #comments
السطر الأول معروف جيدا بالنسبة لمستعملي الشيل shell , حيث أنه يكون دائما و أبدا في أول الملف و هو المخبر الأساسي للنظام عن المفسر المطلوب لإجراء المهمة المطلوبة , الرمز الأول هو علامة الرفع # ثم علامة التعجب ! , يأتي بعدها مسار المفسر المطلوب و هنا هو مفسر بيرل و بامكانك معرفة مساره بهذا الأمر على منصة لينوكس which perl , ليأتي من بعدها دور الخيارات مثلا هنا لدينا –w و التي هي مسئولة عن عرض سطر الخطأ في المفسر لتسهيل المهمة عن المبرمج , أما الدالة print فتعتبر المسئولة عن الطباعة على الشاشة , أما \n لا تظهر مع جملة الطباعة و إنما يتم تفسيرها على أنها سطر جديد أي New line , من بعد ذلك تأتي الفاصلة المنقوطة و التي تعتبر إلزامية في نهاية كل سطر حسب قواعد بيرل و الا فان البرنامج لن ينفذ , أما علامة الرفع # فهي إلزامية أيضا لكتابة التعليقات , و الآن احفظ الملف بهذا الامتداد hallo.pl أو hallo.perl , عليك أيضا التوجه من bash إلى منطقة الملف المراد تنفيذه عن طريق الأمر cp في لينوكس أو cd في ويندوز لتسمح لبرنامجك بالتنفيذ عبر هذا الأمر : chmod +x hallo.pl طبعا على منصة لينوكس. أخيرا أكتب في مفسر بيرل الأمر الأتي :perl hallo.pl و ناتج تنفيذ البرنامج يكون كالأتي :
Salem alikom
و في كل الحالات بإمكانك مراقبة البرنامج عن طريق ملف إخراج لك الحرية في تسميته , و صيغته تكون حسب نوع البرنامج المنفذ ليتم تحريره تلقائيا من طرف المفسر , مثلا :
perl hallo.pl >name.txt
و عند فتح الملف تجد جملة الإخراج hallo world مطبوعة بداخله .
1-2 أنواع البيانات:
إن البيانات التي يتم التعامل معها في أي برنامج أو script إن لم أقل مع كل لغات البرمجة هو تحديد أنواع البيانات و من المبادئ الأساسية هو تحديد تلك البيانات من التي تبقى ثابتة طول فترات تنفيذ البرنامج أي صالحة للقراءة فقط ذلك ما يسمى بالثوابت أي Constants , أما النوع الآخر فعكس السابق وهي المتغيرات Variables , و فيما يخص المتغيرات في بيرل فأبشرك بأنك لست ملزم كما في أغلب اللغات بالإعلان المسبق لأنواع متغيراتك كما في السي مثلا و ما شابه , حيث يمكن تصنيفها في ثلاثة أنواع : أولا scalar , ثانيا : المصفوفات , ثالثا : haches, و ما عليك إلا أن تتكيف مع الرموز خاصة إن لغتنا الجديدة تحوي العديد منها , ذلك ربما ما يجعل المبتدئ يتساءل عن وجودها , أقول له ! الرموز بالنسبة لمبرمج بيرل مثل لافتات الطريق حيث بوجودها يمكنك معرفة ما الذي تقوم به من جهة ؟ و ليصبح الكود أيضا (المصدر) سهل الاطلاع ليمكنك تطويره فيما بعد من جهة أخرى .
Scalar1-3 : الرمز ( $ )
أي متغير من نوع scalar يعتبر قيمة أحادية سواء كان قيمة عددية ( أعداد حقيقية , أعداد صحيحة ) أو سلسلة نصية نفس الشيء ! لست بحاجة إلى إعلان مسبق للمتغيرات.كالأعداد أو السلاسل النصية , فالقاعدة المتبعة لتعريف متغيرات scalar هي دوما نفسها و إن اختلفت أنواع البيانات فما عليك إلا احترام علامة ( $ ) لتعريف scalar . و هذا مثال على ما سبق ذكره :
$a="salem alikom\n";
print $a;
لا حظ في مثالنا ذاك أنه لم نحدد نوع بيانات المتغير ان كان سلسلة نصية أو أعداد , و لاحظ أيضا أن الرمز $ و كأنها تقول لبيرل أن هذا من نوع scalar أي أنها قيمة مفردة ( أحادية ) .
1-4 التعامل مع الأعداد :
أن تتعامل مع الأرقام في بيرل فتلك هي السهولة بعينها إن صح التعبير , يكون التعامل مع الأعداد في طباعتها على الشاشة أو استعمال مؤثرات عليها كالجمع و الطرح و القسمة و الضرب , و من الأمثلة على التنوع في الأعداد ما يلي :
أن تتعامل مع الأرقام في بيرل فتلك هي السهولة بعينها إن صح التعبير , يكون التعامل مع الأعداد في طباعتها على الشاشة أو استعمال مؤثرات عليها كالجمع و الطرح و القسمة و الضرب , و من الأمثلة على التنوع في الأعداد ما يلي :
المؤثرات العددية هي كالآتي:
1-5السلاسل النصية :
لقد رأينا فيما سبق أنه بإمكاننا جعل سلسلة نصية بمثابة متغير . لكن هناك العديد من الطرق لتخصيص مثل هذا النوع من قيم المتغيرات .
- على سبيل المثال مع علامتي التنصيص المفردة أي ( ' ' ) عندما يكون لنا متغير مكتوب بداخل تلك العلامتين , فهذا يعني أن العملية ستتم ترجمتها من المفسر لكن المتغير الثاني الذي هو بحد ذاته موجود داخل المتغير الأول لن تتم ترجمته , و لذلك يطلق عليها اسم علامة التنصيص القوية.
- علامة التنصيص المزدوجة ( " " ): أو كما يسميها المبرمجون بعلامة التنصيص الضعيفة , في الحقيقة شكل وعمل هذه العلامة ليس مختلف عن الأولى حيث أن لها دور كبير مع دالة الطباعة print , إلا أنها في المضمون تختلف تماما عن سابقتها , حيث إن الأخيرة تسمح بإظهار المتغير الداخلي الثاني فيها بقيمته الحقيقية , تقريبا عكس العلامة السابقة .
الإبتساماتإخفاء