دستورات perl در لینوکس به همراه مثال

دستور perl در لینوکس یک ابزار قوی برای انجام کارهای مختلف از جمله پردازش متن و مدیریت سیستم است. Perl پشتیبانی قابل توجهی از regular expressions، file manipulation و اتوماسیون ارائه می‌دهد و به کاربران اجازه می‌دهد تا به راحتی با چالش‌های برنامه نویسی دشوار از خط فرمان مقابله کنند. در این مطلب، من با استفاده از مثال‌های عملی، ویژگی‌های فرمان perl را نشان می‌دهم تا نشان دهم که در شرایط مختلف دنیای واقعی چقدر همه کاره و کارآمد است.
 


دستور perl در لینوکس چیست؟

در لینوکس، دستور perl یک زبان برنامه نویسی تفسیر شده سطح بالا است که برای مدیریت سیستم و پردازش متن استفاده می‌شود. مخفف perl به معنای Practical Extraction and Reporting Language است. لری وال (Larry Wall) آن را در اواخر دهه 1980 ایجاد و آن را در سال 1987 منتشر کرد. قدرت عبارات منظم (regular expressions) در پرل آن را برای تجزیه و پردازش فایل‌های متنی، تهیه گزارش و توسعه اپلیکیشن‌های وب محبوب کرد.

دستور perl لینوکس اسکریپت‌های perl را تفسیر می‌کند. کاربران می‌توانند اسکریپت‌های پرل را از خط فرمان یا اسکریپت‌های bash اجرا کنند تا وظایف مدیریت سیستم و سایر وظایف را خودکار نمایند. پرل به دلیل پشتیبانی گسترده از کتابخانه و قابلیت همکاری cross-platform هنوز برای بسیاری از وظایف برنامه نویسی استفاده می‌شود.


سینتکس دستور perl

سینتکس دستور perl معمولا از فرمت زیر پیروی می‌کند:


perl [options] [programfile] [argument]

نکته: عناصر محصور شده در براکت در سینتکس بالا، اجباری نیست.

  • perl: مفسر Perl را فرا می‌خواند.
  • [options]: فلگ‌های خط فرمان اختیاری را نشان می‌دهد که رفتار پرل را تغییر می‌دهند.
  • [programfile]: فایل اسکریپت Perl را که باید اجرا شود را مشخص می کند.
  • [argument]: نشان دهنده آرگومان‌های اختیاری است که در حین اجرا به اسکریپت Perl ارسال می‌شود.

اگر می‌خواهید نسخه یا اطلاعات جزئیات این دستور را بدانید، دستورات زیر را به ترتیب اجرا کنید:


perl –version

perl --help

vps یک ماشین مجازی کامل است که امکان دسترسی SSH طبق آموزش را به آن خواهید داشت.
خرید vps در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.

گزینه‌ها (Options) دستور perl

دستور perl دارای یک صفحه man است که می‌تواند به شما کمک کند تا تمام اطلاعات مورد نیاز در مورد این دستور را دریافت کنید. فقط دستور زیر را در ترمینال خود بنویسید:


man perl

چندین گزینه مرتبط با دستور perl وجود دارد. برخی از پرکاربردترین گزینه ها عبارتند از:

توضیحات میان‌بر
حالت taint را در پرل فعال و به طور پیش فرض همه داده‌ها را بدون توجه به منبع آن غیرقابل اعتماد می‌داند و اقدامات امنیتی سخت‌تری را اعمال می‌کند. -T
هشدارهای tainting را فعال می‌کند. هنگامی که فعال باشد، پرل داده‌ها را در صورتی که از یک منبع نامعتبر مانند ورودی کاربر یا داده‌های محیط آمده باشد، به‌عنوان «tainted» علامت‌گذاری می‌کند. -t
از perl می‌خواهد که پس از کامپایل کردن برنامه یک core dump ایجاد کند. -u
به perl اجازه می‌دهد تا عملیات ناامن(unsafe) را انجام دهد. -U
تمام warningها را در حین اجرای اسکریپت پرل فعال می‌کند. -w
همه warningها را بدون توجه به عدم هشدار یا $^W فعال می‌کند. -W
همه warningها را بدون توجه به هشدارهای استفاده یا $^W غیرفعال می‌کند. -X
خلاصه‌ای از گزینه‌های خط فرمان را نمایش می‌دهد. -h
نسخه و patch level فایل اجرایی perl شما را نمایش می‌دهد. -v
خلاصه‌ای از مقادیر قابل توجه پیکربندی perl و مقادیر فعلی آرایه INC@ را نمایش می‌دهد. -V
مقدار(value) متغیرهای پیکربندی مشخص شده را به خروجی استاندارد می‌دهد، زمانی که آرگومان configvar شبیه یک عبارت منظم باشد، مقادیر متعددی را چاپ می‌کند. -V[:configvar] 

پرچم‌های دیباگینگ را برای کنترل اجرای perl مشخص می‌کند، با -Dtls که برای مشاهده اجرای برنامه استفاده می شود.

-Dletters-Dnumber
Perl را روی آرگومان‌های نام فایل تکرار می‌کند، شبیه به رفتار حلقه‌های sed -n یا awk. -n
از perl می‌خواهد تا یک حلقه در اطراف برنامه شما پیاده سازی کرده و به آن اجازه می‌دهد تا روی آرگومان‌های نام فایل مشابه رفتار sed تکرار کند. -p
الگوی را مشخص می‌کند که وقتی -a فعال است، بر روی آن تقسیم شود و در صورتی که فضای خالی در الگو در نظر گرفته نشده باشد، امکان استفاده از جداکننده‌هایی مانند //، «» یا «» را با نقل‌قول‌های تکی فراهم می‌کند. -Fpattern
جداکننده رکورد ورودی ($/) را به عنوان یک مقدار اکتال یا هگزادسیمال تعریف می‌کند. در صورت عدم وجود ارقام، کاراکتر تهی به عنوان جداکننده عمل می‌کند. سوئیچ های دیگر ممکن است قبل یا بعد از ارقام رخ دهند. -0[octal/hexadecimal]
هنگامی که با -n یا -p استفاده می‌شود، حالت تقسیم خودکار را فعال می‌کند. یک فرمان split ضمنی به آرایه F@ به عنوان اولین مرحله در حلقه while ضمنی تولید شده توسط گزینه های -n یا -p اجرا می شود. -a
برنامه را از طریق دیباگر perl اجرا می کند. اگر t داده شود، به اشکال‌زدا اطلاع می‌دهد که از رشته‌ها در کد در حال رفع اشکال استفاده شده است. -d, -dt
به کاربران اجازه می دهد تا یک خط کد را مستقیم در خط فرمان وارد کنند. اگر از -e استفاده شود، perl نام فایل را در آرگومان‌ها جستجو نمی کند. کاربران می‌توانند چندین دستور -e را وارد کنند تا یک اسکریپت چند خطی بسازند، و اطمینان حاصل کنند که در صورت لزوم، نقطه ویرگول‌ها را مانند نوشتن یک برنامه معمولی درج می‌کنند. -e
مانند -e رفتار می کند، با این تفاوت که به طور ضمنی تمام ویژگی های اختیاری را فعال می کند -E
ماژول use(); قبل از اجرای برنامه -m[-]module
دستور 'use module;' را قبل از اجرای برنامه اجرا می‌کند و اجازه می‌دهد کد اضافی بعد از نام ماژول در داخل نقل قول‌ها وجود داشته باشد. -M[-]’module…
اجرای $Config{sitelib}/sitecustomize.pl را هنگام راه اندازی غیرفعال می کند. -f
به شما امکان می دهد مشخص کنید که پرل چگونه یونیکد را در اسکریپت شما مدیریت کند. برای مثال، می‌توانید حالت UTF-8 را با -CSD فعال کنید، که به پرل می‌گوید از UTF-8 برای هر دو جریان ورودی و خروجی استفاده کند. -C
تجزیه اولیه سوئیچ هایی را که بعد از نام برنامه اما قبل از هر آرگومان نام فایل یا جداکننده آرگومان "–" قرار می گیرند، فعال می کند. -s
Perl را با استفاده از متغیر محیطی PATH برای اسکریپت جستجو می کند. -S
به پرل نشان می دهد که برنامه در یک متن بزرگتر و نامرتبط مانند یک پیام پستی قرار دارد، و تا خطی که با # شروع می شود، زباله های اصلی را دور می اندازد! با پرل مواجه می شود. -x-xdirectory
فایل ها را در جای خود ویرایش می کند، به صورت اختیاری فایل های پشتیبان با پسوند مشخص شده ایجاد می کند. -i[extension]
دایرکتوری های مشخص شده توسط -I به مسیر جستجوی ماژول ها (@INC ) اضافه می شوند. -I(directory)
مدیریت خودکار انتهای خط را فعال می کند: جداکننده رکورد ورودی را هنگامی که با -n یا -p استفاده می شود chomps می کند و جداکننده رکورد خروجی را به یک مقدار هشتگانه مشخص اختصاص می دهد. -l[octnum]


مثال‌های عملی استفاده از دستور perl در لینوکس

در این بخش چند اپلیکیشن کاربردی و مثال با استفاده از دستور perl ارائه می‌دهم تا بتوانید درک عمیق‌تری از این موضوع و نحوه استفاده موثرتر از زبان perl در لینوکس به دست آورید:

 

  1. گزینه‌هایی برای اسکریپت نویسی ایمن و کارآمد

گزینه‌های شبکه ایمنی در پرل، حفاظت‌های حیاتی را برای توسعه‌دهندگان فراهم می‌کنند و به کشف خطاها و جلوگیری از آسیب‌پذیری‌های امنیتی کمک می‌کنند. چندین گزینه شبکه ایمنی در زبان پرل وجود دارد.

به عنوان مثال: گزینه c- برنامه را بدون اجرای آن کامپایل می‌کند و به توسعه دهندگان اجازه می‌دهد تا به سرعت خطاهای سینتکسی را در حین ویرایش شناسایی کنند. به تصویر زیر نگاه کنید:

آموزش کدنویسی در پرل

گزینه‌های دیگر عبارتند از w-، که (به جای اخطارهای استفاده در پرل مدرن) هشدارهایی را فعال می‌کند که توسعه‌دهندگان را نسبت به اشکالات احتمالی در کدشان آگاه می‌کند:

آموزش اخطار کد در پرل


در نهایت، گزینه T- حالت taint mode را فعال می‌کند، که داده های خارجی را غیرقابل اعتماد تلقی کرده و خطر نقض امنیت را کاهش می‌دهد. داده ها در taint mode باید قبل از استفاده در عملیات خاص به دقت تایید شوند.

  1. اجرای اسکریپت perl نوشته شده در فایل

این موثرترین راه برای اجرای یک اسکریپت نسبتا بزرگتر Perl از ترمینال است. در اینجا، اسکریپت پرل خود را در یک فایل نوشته و سپس فایل را برای اجرای آن فراخوانی می‌کنید.

 

  • اسکریپت پایه

برای اجرای یک اسکریپت پایه پرل، ابتدا باید یک فایل جدید ایجاد کنید، اسکریپت را داخل آن نوشته و آن را در دایرکتوری مناسب ذخیره کنید. سپس، باید با استفاده از دستور cd به آن دایرکتوری رفته و perl را بنویسید.
فرض کنید، اسکریپت زیر را در فایلی به نام helloWorld.pl نوشته‌اید که !Hello, World را چاپ می‌کند. به خروجی استاندارد:


use strict;
use warnings;

print "Hello, World!\n";

نمونه یک فایل پرل ساده

حالا دستور زیر را اجرا کنید:

perl helloWorld.pl

باز هم می توانید هر اسکریپت پرل را بدون استفاده از دستور perl اجرا کنید. در این صورت باید یک خط shebang (#!) در ابتدای کد اضافه کنید و با استفاده از دستور chmod به فایل اجازه اجرایی بدهید.

به عنوان مثال: این خط usr/bin/perl/!#  را در ابتدای اسکریپت اضافه کنید، فایل را ذخیره کنید، مجوز اجرایی را بدهید و دستور زیر را اجرا کنید:

./helloWorld.pl

اجرای فایل پرل

نکته: بهترین روش این است که همیشه خط shebang (که با # نشان داده می شود) را در اسکریپت خود بگنجانید، چه از دستور خاصی برای اجرای اسکریپت استفاده کنید یا نه.

  • اسکریپت با حلقه‌ها

حلقه‌ها در زبان‌های برنامه‌نویسی، اجرای مکرر بلوک‌های کد را در حین تکرار روی مجموعه‌ای از مقادیر یا آیتم‌ها امکان‌پذیر می‌کنند. آنها اجزای کلیدی برای خودکارسازی فرآیندها و پردازش موثر داده ها در پارادایم های برنامه نویسی هستند.

اسکریپت perl زیر اعداد 1 تا 10 را هر کدام در یک خط جدید چاپ می‌کند:

#!/usr/bin/perl

use strict;
use warnings;

# Loop from 1 to 10
for my $i (1..10) {
    print "$i\n";
}


این اسکریپت پرل با اعلام مکان مفسر خود و فعال کردن warnings pragmas و strict  برای بهبود کیفیت کد شروع می شود. سپس یک حلقه for وارد می کند که از 1 تا 10 تکرار می شود. در هر تکرار، مقدار فعلی متغیر حلقه $i و به دنبال آن یک کاراکتر خط جدید را چاپ می کند. در نتیجه این اسکریپت اعداد 1 تا 10 را هر کدام در یک خط جدید چاپ می کند.

دستور زیر را برای اجرای اسکریپت اجرا کنید:

perl loop.pl

آموزش نوشتن حلقه در perl

  1.  اجرای تک خطی دستور perl

شما می توانید کد پرل خود را مستقیم در داخل سینگل کوتیشن بعد از گزینه -e در دستور perl بنویسید. این روش برای اجرای اسکریپت‌هایی که فقط یک خط دارند مفید است.

  • برنامه‌های خط فرمان

گزینه های خط فرمان Perl انعطاف پذیری را در مدیریت ورودی، خروجی و رفتار اجرا فراهم می‌کند و آن را برای طیف گسترده ای از وظایف اسکریپت نویسی مناسب می کند.
برای مثال دستور زیر را اجرا کنید:


perl -e 'print "This is my first perl command line.\n"'

آموزش perint -e در پرل

در تصویر بالا می‌توانید هر خطی را بعد از دستور print داخل دابل کوتیشن قرار دهید.

  • نمایش خطوط اسکریپت از فایل در ترمینال

برای نمایش تمام خطوط متوالی یک اسکریپت نوشته شده در یک فایل در داخل ترمینال، دستور زیر را اجرا کنید:


perl -n -e 'print "$. - $_"' helloWorld.pl

آموزش perint -n در فایل پرل

در تصویر بالا تمامی خطوط فایل با نام hello.pl با شماره گذاری نمایش داده شده است.

  • جداکننده‌های رکورد (Record Separators)

جداکننده‌های رکورد، کاراکترها یا الگوهایی هستند که برای مشخص کردن رکوردها یا واحدهای داده در یک فایل یا استریم استفاده می‌شوند. برای جدا کردن رکوردهای فایلی به نام fruits.pl با کاما (,) دستور زیر را اجرا کنید:


perl -F, -pe 's/$/,/' services.pl

جداکننده‌های رکورد در پرل

در تصویر بالا رکوردهای فایل با نام services.pl با کاما (،) از هم جدا شده‌اند. اگر می‌خواهید آنها را با جداکننده‌های دیگر از هم جدا کنید، فقط آن جداکننده را به جای کاما بین 2  بک اسلش قرار دهید.

نکته: این دستور محتوای فایل را تغییر نمی‌دهد. این فقط رکورد یک فایل را نشان می‌دهد که توسط جداکننده ‌های سفارشی در داخل ترمینال جدا شده است.

  • ویرایش در محل (In-Place)

ویرایش در محل در دستور perl امکان تغییر مستقیم فایل‌ها را بدون نیاز به ایجاد فایل‌های موقت (temporary) یا مداخله دستی فراهم می‌کند. برای مثال فرض کنید فایلی به نام orange.pl دارید. اکنون، می‌خواهید هر بار که در داخل فایل ظاهر می‌شود، کلمه host را با parsdev بدون دسترسی به فایل جایگزین کنید.

به سادگی دستور زیر را اجرا کنید:

perl -i -pe 's/host/parsdev/g' host.pl

ویرایش  In-Place در پرل

در تصویر بالا مشاهده می کنید که کلمه apple جایگزین کلمه ornge در داخل فایل با نام orange.pl می شود. من از دستور cat برای مشاهده محتویات فایل استفاده کرده ام.

  1. اجرای اسکریپت‌های perl به طور مستقیم از ترمینال

راه دیگری برای اجرای یک اسکریپت نسبتا بزرگتر Perl وجود دارد. به جای نوشتن یک اسکریپت در یک فایل و سپس فراخوانی آن، می توانید کل اسکریپت خود را در ترمینال بنویسید و آن را در ترمینال اجرا کنید. اگر نمی خواهید فایل‌های زیادی ایجاد کنید که باعث سردرگمی شما شود، این روش می‌تواند مفید باشد.

از طرف دیگر، اگر می خواهید اسکریپتی را که به تازگی نوشته اید ذخیره کنید و می خواهید اسکریپت را چندین بار اجرا کنید، همیشه باید آن را در یک فایل ذخیره کنید.

برای نوشتن یک اسکریپت در داخل ترمینال، ابتدا perl را بنویسید و ENTER را فشار دهید. سپس، اسکریپت زیر را هنگام نوشتن آن در داخل یک فایل بنویسید:


#!/usr/bin/perl

use strict;
use warnings;

# Loop from 1 to 10
for my $i (1..10) {
    print "$i\n";
}

پس از اتمام، CTRL+D را فشار دهید تا اسکریپت اجرا شود و نتیجه نمایش داده شود:

دستور پرل مستقیم در ترمینال


نتیجه

در این مطلب، برخی از ویژگی‌های دستور perl را در لینوکس و سودمندی آن را در خودکارسازی فرآیندهای مختلف نشان دادم. پیشنهاد می‌کنم که قابلیت های گسترده Perl را در استفاده عملی تجربه کنید.