دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۶
  • اردیبهشت

جلسه ۲۰ : آموزش کار با مقادیر خاص در پرل

  • دسته‌بندی‌ها :
جلسه ۲۰ : آموزش کار با مقادیر خاص در پرل
    • جزئیات
    • نوع محتواآموزشی

      مقدمه

      با سلام خدمت کاربران گرامی سایت پی وی لرن و کاربرانی که علاقمندان به دوره آموزشی پرل Perl. در جلسه گذشته به صورت مفصل و جزء به جزء انواع خطاها در پرل و نحوه مدیریت آن ها را در کنار هم آموختیم. در این جلسه و در ادامه سری آموزش پرل با آموزش کار با متغیر های خاص در پرل همراه شما هستیم.

      آموزش کار با متغیر های خاص در پرل

      مقادیر خاصی در پرل وجود دارند که معنای از پیش تعیین شده و خاصی دارند.
      آن ها مقادیری هستند که از کاراکترهای تاکیدی بعد از متغیرهای شاخص ($, @ یا %) از قبلی $ استفاده می نمایند.
      در آموزش کار با متغیر های خاص در پرل شما را با این گونه متغیر ها آشنا می نماییم.

      اکثر متغیر های خاص نامی انگلیسی طولانی ای دارند مانند : متغیر $ Operating System Error variable که می تواند به شکل  OS_ERROR$ نوشته شود.
      اما اگر قصد استفاده از نام انگلیسی متغیر ها را دارید باید یک خط use English; به بالای فایل برنامه خودتان اضافه نمایید.
      این عمل موجب هدایت مترجم پرل به انتخاب دقیق ترین معنای متغیر ها می شود.

      در ادامه آموزش متغیر های خاص در پرل شما را با پر کاربرد ترین متغیر ذر پرل آشنا می نماییم.
      پر کاربرد ترین متغیر خاص، متغیر _$ است که شامل ورودی پیش فرض و رشته الگوی جستجو است.
      به عنوان نمونه به خطوط زیر توجه نمایید.

      مثال : 

      اجرای قطعه کد بالا، نتیجه زیر را به همراه خواهد داشت.

      مثال : 

      حالا بیایید همان مثال را این بار بدون استفاده از متغیر _$ بررسی نماییم.

      مثال : 

      اجرای قطعه کد بالا، نتیجه زیر را به همراه خواهد داشت.

      مثال : 

      با اجرای Loop در اولین دفعه “hickory” ، در دومین دفعه “dickory” و در سومین و آخرین بار نیز “doc” پرینت می شود.
      به همین دلیل است که که در هر بار تکرار Loop، رشته فعلی در _$ جایگذاری می شود و به وسیله پرینت پیش فرض مورد استفاده قرار می گیرد.
      در این جا موقعیت ها و مکان هایی وجود دارند که  حتی اگر آن ها مشخص نکرده باشید پرل آن ها را _$ در نظر می گیرد.

      بررسی موقعیت ها و مکان هایی که به صورت پیش فرض _$ در نظر گرفته می شوند

      • توابع مختلف غیر معمول، از جمله توابع مانند ord و int، و همچنین تمام آزمونهای فایل (f، -d-) به جز t-، که به طور پیش فرض STDIN است.
      • لیست توابع مختلف مانند print و unlink.
      • عملیات تطبیق الگوی ///m//، s و ///tr هنگام استفاده بدون اپراتور ~ =.
      • متغیر تکرار در یک foreach loop در صورتی که هیچ متغیر دیگر ارائه نشده باشد.
      • متغیر تکرار الزامی در توابع grep و map.
      • مکان پیش فرض برای قرار دادن یک رکورد ورودی هنگامی که نتیجه عملیات یک line-input توسط خودش تست شده و به عنوان تنها معیار تست در نظر گرفته می شود.

      متغیر های ویژه و خاص در پرل دارای انواع و دست هایی هستند که در ادامه آموزش کار با متغیر های خاص در پرل به معرفی آن ها می پردازیم.

      انواع متغیرهای ویژه

      بر اساس استفاده و ماهیت متغیرهای خاص، می توانیم آنها را در دسته های زیر طبقه بندی کرد.

      • متغیرهایGlobal Scalar.
      • متغیرهای ویژه Global Array
      • متغیرهای خاص Global Hash
      • Filehandles های ویژه Global
      • محتوا های ویژه Global
      • متغیرهای ویژه ای که شامل عبارات قاعده مند هستند.
      • متغیرهای خاص Filehandle.

      متغیر های اسکالر Global

      در ادامه آموزش کار با متغیر های خاص در پرل لیستی از متغیر های اسکالر خاص را مشاهده می نمایید.
      در این لیست نام انگلیسی متغیر ها به همراه نماد آن ها آورده شده است.

      متغیر های اسکالر Global بخش اول

      • _$
        ورودی پیش فرض و فضای جستجوی الگو.
      • ARG$
        ورودی پیش فرض و فضای جستجوی الگو.
      • .$
        شماره خط ورودی فعلی آخرین  filehandle که خوانده شده است.
      • NR$
      • شماره خط ورودی فعلی آخرین  filehandle که خوانده شده است.
      • /$
        جداکننده رکورد های ورودی؛ خط جدید به طور پیش فرض اگر به رشته صفر تنظیم شود، خطوط خالی را بعنوان delimiters پردازش می کند.
      • RS$
        جداکننده رکورد های ورودی؛ خط جدید به طور پیش فرض اگر به رشته صفر تنظیم شود، خطوط خالی را بعنوان delimiters پردازش می کند.
      • ,$
        جداساز فیلد خروجی برای اپراتور پرینت.
      • OFS$
        جداساز فیلد خروجی برای اپراتور پرینت.
      • \$
        جداساز فیلد خروجی برای اپراتور پرینت.
      • ORS$
        جداساز فیلد خروجی برای اپراتور پرینت.

      متغیر های اسکالر Global بخش دوم

      • “$
        عملکردی مشابه ,$ دارد به جز اینکه آن را به مقادیر لیست تعبیر شده به یک رشته نقل قول دوگانه (یا رشته مشابه تفسیر شده) اعمال می کند. به صورت پیش فرض حالت space برای آن فعال است.
      • LIST_SEPARATOR$
        عملکردی مشابه ,$ دارد به جز اینکه آن را به مقادیر لیست تعبیر شده به یک رشته نقل قول دوگانه (یا رشته مشابه تفسیر شده) اعمال می کند. به صورت پیش فرض حالت space برای آن فعال است.
      • ;$
        جدا ساز اسکریپت که برای شبیه سازی Array چند بعدی در نظر گرفته شده است و به صورت پیش فرض ۰۳۴\ است.
      • SUBSCRIPT_SEPARATOR$
        جدا ساز اسکریپت که برای شبیه سازی Array چند بعدی در نظر گرفته شده است و به صورت پیش فرض ۰۳۴\ است.
      • ^L$
        تعیین می کند که چه خروجی برای یک formfeed تنظیم شود. به صورت پیش فرض f\ است.
      • FORMAT_FORMFEED$
        تعیین می کند که چه خروجی برای یک formfeed تنظیم شود. به صورت پیش فرض f\ است.
      • :$
        مجموعه ای از کاراکترهای موجود که پس از آن ها یک رشته ممکن است شکسته شود تا زمینه ادامه (starting with ^) در فرمت پر شود.
      • FORMAT_LINE_BREAK_CHARACTERS$
        مجموعه ای از کاراکترهای موجود که پس از آن ها یک رشته ممکن است شکسته شود تا زمینه ادامه (starting with ^) در فرمت پر شود.
      • A^$
        مقدار فعلی accumulator که از آن برای نوشتن فرمت خط ها استفاده می شود.
      • ACCUMULATOR$
        مقدار فعلی accumulator که از آن برای نوشتن فرمت خط ها استفاده می شود

      در ادامه آموزش کار با متغیر های خاص در پرل شما را به بخش سوم متغیر های اسکالر Global هدایت می کنیم.

      متغیر های اسکالر Global بخش سوم

      • #$
        شامل فرمت خروجی برای اعداد پرینت شده است.
      • OFMT$
        شامل فرمت خروجی برای اعداد پرینت شده است.
      • ?$
        مشخص کردن وضعیت بازگشت به وسیله  last pipe close ،backtick () command و یا اپراتور سیستم.
      • CHILD_ERROR$
        مشخص کردن وضعیت بازگشت به وسیله  last pipe close ،backtick () command و یا اپراتور سیستم.
      • !$
        اگر از محتوای عددی استفاده شود؛ در آن صورت مقدار فعلی متغیر errno را تعیین می کند و آخرین خطای فراخوانی سیستم را شناسایی می نماید. اگر از این متغیر در محتوای رشته استفاده شود؛ خطای آن را آشکار می نماید.
      • OS_ERROR or $ERRNO$
        اگر از محتوای عددی استفاده شود؛ در آن صورت مقدار فعلی متغیر errno را تعیین می کند و آخرین خطای فراخوانی سیستم را شناسایی می نماید. اگر از این متغیر در محتوای رشته استفاده شود؛ خطای آن را آشکار می نماید.
      • @$
        پیام خطای سینتکس پرل از آخرین دستور eval.
      • EVAL_ERROR$
        پیام خطای سینتکس پرل از آخرین دستور eval.
      • $$
        اجرای این اسکریپت بر عهده pid پرل است.
      • PROCESS_ID or $PID$
        اجرای این اسکریپت بر عهده pid پرل است.
      • >$
        ID کاربری واقعی (uid) از پروسه فعلی.
      • REAL_USER_ID or $UID$
      • ID کاربری واقعی (uid) از پروسه فعلی.
      • <$
        ID کاربر اثر گذار پروسه فعلی.
      • EFFECTIVE_USER_ID or $EUID$
        ID کاربر اثر گذار پروسه فعلی.
      • )$
        ID گروه واقعی پروسه فعلی.
      • REAL_GROUP_ID or $GID$
        ID گروه واقعی پروسه فعلی.
      • ($
        gid اثر گذار بر پروسه فعلی.
      • EFFECTIVE_GROUP_ID or $EGID$
        gid اثر گذار بر پروسه فعلی.

      • حاوی نام فایل حاوی اسکریپت پرل که اجرا می شود.
      • PROGRAM_NAME$
      • ]$
        شاخص اول عنصر در array و اولین کاراکتر در زیر رشته. پیش فرض ۰ است.
      • [$
        نسخه plus patchlevel divided by 1000 را بازگردانی می نماید.
      • PERL_VERSION$
        نسخه plus patchlevel divided by 1000 را بازگردانی می نماید.

      در ادامه آموزش کار با متغیر های خاص در پرل بخش نهایی متغیر های اسکالر Global را به شما معرفی می نماییم.

      متغیر های اسکالر Global بخش چهارم

      • D^$
        مقدار فعلی debugging flags را تعیین می نماید.
      • DEBUGGING$
        مقدار فعلی debugging flags را تعیین می نماید.
      • E^$
        نمایش پیام خطای پیشرفته در بعضی از سیستم عاملها.
      • EXTENDED_OS_ERROR$
        نمایش پیام خطای پیشرفته در بعضی از سیستم عاملها.
      • F^$
        حداکثر توضیحات فایل سیستم، معمولا بر روی عدد ۲ تنظیم شده است.
      • SYSTEM_FD_MAX$
        حداکثر توضیحات فایل سیستم، معمولا بر روی عدد ۲ تنظیم شده است.
      • H^$
        دارای کامپایل داخلی است که توسط برخی از ماژول های عملی اجرا می شود.
      • I^$
        مقدار فعلی اکستنشن inplace-edit تعیین می کند. برای غیر فعال کردن inplace editing از undef استفاده نمایید.
      • INPLACE_EDIT$
        مقدار فعلی اکستنشن inplace-edit تعیین می کند. برای غیر فعال کردن inplace editing از undef استفاده نمایید.
      • M^$
        در صورت بروز یک خطای غیر منتظره در پرل می توان از محتویات M$ به عنوان حافظه اظطراری استفاده کرد. برای استفاده از M$ به یک کامپایل ویژه احتیاج است. برای کسب اطلاعات بیشتر به سند INSTALL مراجعه نمایید.
      • O^$
        شامل نام سیستم عامل است که باینری پرل فعلی برای آن کامپایل شده است.
      • OSNAME$
      • شامل نام سیستم عامل است که باینری پرل فعلی برای آن کامپایل شده است.

      آموزش کار با متغیر های خاص در پرل را با معرفی متغیر های ویژه Global Array ادامه می دهیم.

      متغیر های ویژه Global Array

      • ARGV@
        این array حاوی arguments های خط فرمان برای اسکریپت است.
      • INK@
        این array حاوی مکان هایی هست که برای اسکریپت های پرل در آن ارزیابی می شوند و از لحاظ عملکرد، ساختارها، نحوه استفاده و … مورد بررسی قرار می گیرند.
      • F@
        array یی که در آن  زمانی که سوئيچ خط -a داده می شود array شروع به تقسیم خطوط وروری می کند.

      متغیر های ویژه Global Hash

      • INK%
        این hash حاوی مطالب فایل ها است که از طریق via یا require ایجاد می شوند.
      • ENV%
        این hash حاوی محیط فعلی شما است.
      • SIG%
        این hash برای تنظیم سیگنال های مختلف به کار می رود.

      filehandle ویژه Global

      • ARGV
        filehandle خاص که بیش از نام فایل های خط فرمان در ARGV@ تکرار می شوند. معمولا به عنوان filehandle null در <> نوشته شده است.
      • STDERR
        filehandle ویژه برای خطای استاندارد در هر بسته.
      • STDIN
        فایل filehandle برای ورودی استاندارد در هر بسته.
      • STDOUT
        فایل filehandle برای خروجی استاندارد در هر بسته.
      • DATA
        تا زمانی که در حال خواندن داده ها در بسته __DATA__ باشید؛ فایل filehandle  به هر چیزی که پس از __END__ در فایل حاوی اسکریپت. یا، filehandle در __DATA__ اشاره می کند.
      • _ (underscore)
        فایل filehandle خاص برای ذخیره اطلاعات از آخرین stat، lstat، یا اپراتور تست فایل.

      محتوا های ویژه Global

      • __END__
        پایان منطقی برنامه شما را نشان می دهد. هر متن زیر نادیده گرفته می شود، اما ممکن است از طریق فایل file DATA خوانده شود.
      • __FILE__
        نام فایل را در نقطه ای از برنامه خود نشان می دهد که از آن استفاده می شود. این متغیر هنوز به رشته ها وارد نشده است.
      • __LINE__
        شماره خط فعلی را نشان می دهد و نشان می دهد که هنوز  به رشته ها وارد نشده است.
      • __PACKAGE__
        نام بسته فعلی را در زمان کامپایل نشان می دهد،یا اگر نام بسته فعلی وجود ندارد آن را undefined می نماید و نشان می دهد که هنوز  به رشته ها وارد نشده است.

      در  ادامه آموزش کار با متغیر های خاص در پرل به معرفی متغیرهای قاعده مند و متغیرهای خاص Filehandle می پردازیم.

      متغیرهای ویژه ای که شامل عبارات قاعده مند هستند

      • digit$
        شامل متن متناسب با مجموعه مربوطه که با پرانتز در آخرین الگو مطابقت دارد.
        برای مثال ۱$ با هر آنچه که در اولین مجموعه ای از پرانتز در عبارات منظم قبلی موجود بود مطابقت دارد.
      • &$ و MATCH$
        رشته هماهنگ با آخرین الگوی موفق.
      • `$ و PREMATCH$
        رشته قبلی به کار رفته که با آخرین الگوی موفق مطابقت دارد.
      • ‘$ و POSTMATCH$
        رشته بعدی که با آخرین الگوی موفق مطابقت دارد.
      • +$ و LAST_PAREN_MATCH$
        نام فرمت بالای صفحه که در حال حاضر برای کانال خروجی انتخاب شده است. به صورت پیش فرض برای filehandle از TOP_ استفاده شده است.
        آخرین براکت که با آخرین الگوی جستجو منطبق است. اگر شما نمی دانید کدام یک از مجموعه های الگوهای جایگزین مطابقت دارند استفاده از این مورد می تواند مفید باشد.

      متغیرهای خاص Filehandle آخرین مبحثی است که در آموزش کار با متغیر های خاص در پرل به آن ها می پردازیم.

      متغیرهای خاص Filehandle

      • |$ و OUTPUT_AUTOFLUSH$
        اگر این متغیر در غیر صفر تنظیم شود، پس از هر نوشتن یا پرینت روی کانال خروجی بر روی (fflush(3 اثر می گذارد.
      • %$ و FORMAT_PAGE_NUMBER$
        شماره صفحه فعلی کانال خروجی که انتخاب شده است را تعیین می نماید.
      • =$ و FORMAT_LINES_PER_PAGE$
        طول صفحه فعلی (خطوط قابل پرینت) کانال خروجی که انتخاب شده است را تعیین می کند. پیش فرض ۶۰ است.
      • -$ و FORMAT_LINES_LEFT$
        تعداد خطوط موجود در صفحه کانال خروجی که انتخاب شده است را تعیین می نماید.
      • ~$ و FORMAT_NAME$
        نام فرمت گزارش فعلی برای کانال خروجی که انتخاب شده است را تعیین می نماید. پیش فرض نام آن filehandle است.
      • ^$ و FORMAT_TOP_NAME$
        نام فرمت بالای صفحه که برای کانال خروجی انتخاب شده است را تعیین می نماید. به صورت پیش فرض نام آن filehandle است که با TOP_ الحاق شده است.

      کلام آخر

      در این جلسه مفصلاً به آموزش کار با متغیر های خاص در پرل پرداختیم.
      در جلسه بعد با آموزش با استاندارد های کد همراه شما خواهیم بود.
      با پی وی لرن همراه باشید.

      QR:  جلسه ۲۰ : آموزش کار با مقادیر خاص در پرل
      به اشتراک بگذارید