پرل
پِرْل (به انگلیسی: Perl) یکی از زبانهای برنامهنویسی سطح بالا، همه منظوره، دارای مفسر و دینامیک است. زبانهای عضو این خانواده شامل پرل نسخه ۵ و نسخه ۶ هستند.[1]
الگو برنامهنویسی | چند الگویی: برنامهنویسی تابعی، برنامهنویسی دستوری، برنامهنویسی شیءگرا (class-based), reflective، برنامهنویسی رویهای، برنامهنویسی رویدادمحور، برنامهنویسی جنریک |
---|---|
طراحی شده توسط | لری وال |
توسعهدهنده | لری وال |
ظهوریافته در | ۱۸ دسامبر ۱۹۸۷ |
انتشار پایدار | 5.26.0 / ۳۰ مه ۲۰۱۷
5.24.2 / ۱۵ ژوئیه ۲۰۱۷ 5.22.4 / ۱۵ ژوئیه ۲۰۱۷ |
انتشار آزمایشی | 5.27.2 / ۲۱ ژوئیه ۲۰۱۷
|
پویا | |
زبان پیادهسازی | سی (زبان برنامهنویسی) |
سیستمعامل | چندسکویی |
پروانه | Artistic License 1.0 or پروانه عمومی همگانی گنو |
.pl .pm .t .pod | |
وبگاه | |
متأثر از | |
AWK، سی (زبان برنامهنویسی)، سی پلاسپلاس، لیسپ، پاسکال (زبان برنامهنویسی)، Sed، اسمالتاک، پوسته یونیکس | |
تأثیر گذاشته بر | |
کافیاسکریپت, ECMAScript، فالکن، گرووی (زبان برنامهنویسی), جاوااسکریپت، جولیا، الپیسی (زبان برنامهنویسی)، Perl 6 ، پیاچپی، پایتون (زبان برنامهنویسی)، روبی (زبان برنامهنویسی)، ویندوز پاورشل | |
اگر چه واژه پرل یک مخفف واقعی نیست[2] ولی مخففهای معکوس متعددی برای ان ساخته شدهاند. یکی از متداولترین این عبارتها " زبان عملی استخراج و گزارش دهی " است.[3]
پیشینه
پرل در سال ۱۹۸۷ توسط لری وال منتشر شد. زبان پرل بهطور وسیعی ساختار خود را از زبان سی و بسیاری از خصوصیات خود را مدیون زبانهای AWK , LISP , SED , SH میباشد. در ابتدا لاری وال در سال ۱۹۸۷ پرل را به عنوان یک زبان همه منظوره بر پایه اسکریپت نویسی در یونیکس ابداع کرد تا فرایند گزارشگیری را آسان تر سازد.[4] امروزه میتوان پرل را در بیش از ۴۰ سیستمعامل بکار گرفت، و کتابخانه CPAN تاکنون ۱۰۰٬۹۹۹ ماژولهای پرل در ۲۳٬۶۵۹ توزیع، نوشته شده توسط ۹٬۳۰۸ نویسنده، بر روی ۲۷۰ سرور میرور با کد منبع در اختیارتان میگذارد که روز به روز بر تعداد آن افزوده میشود. در سال ۱۹۸۸ لری وال زبان برنامهنویسی پرل را به همگان معرفی کرد که میتوانست به جای awk و sed به کار رود. در واقع پرل زبان مفسر داری است که برای کار بر روی فایلهای متنی مناسب است. نسخه شماره ۲ برنامه در همان سال و چند ماه بعد از آن ارائه شد که شبیه نسخههای فعلی پرل بود و پیشرفتهای بسیار خوبی داشت. تا جایی که زبان پرل را برابر با زبان C میدانستند، چون ساختار زبان پرل شبیه زبان C میباشد.
از آن موقع تاکنون تغییرات و بازنگریهای زیادی در این زبان انجام شدهاست. پرل نسخه ۶ که در سال ۲۰۰۰ ابتدا به عنوان بازسازی نسخه پرل ۵ شروع شد، تقریباً منجر به توسعه زبان جدیدی گشت. فرایند توسعه هر دو زبان به شکل جداگانه و توسط تیمهای توسعه دهنده متفاوتی ادامه یافت که گاهی به شکل آزادانه ایدههایی را از همدیگر وام میگرفتند.
Perl 4 از طریق مجموعهای از نسخههای تعمیر و نگهداری منتشر شد که به ترتیب در Perl 4.036 در سال ۱۹۹۳ به پایان رسید. در آن زمان، Wall از Perl 4 برای شروع کار در Perl 5 استفاده کرد. طراحی اولیه Perl 5 تا سال ۱۹۹۴ ادامه یافت. لیست پستی perl5-porter در ماه مه ۱۹۹۴ برای هماهنگی کار برای انتقال Perl 5 به پلتفرمهای مختلف ایجاد شد. انجمن اولیه برای توسعه، نگهداری و انتقال پرل ۵ است.[5]
Perl 5.000 در تاریخ ۱۷ اکتبر ۱۹۹۴ منتشر شد.[6] این تقریباً نسخه کامل بازنویسی مترجم بود و بسیاری از ویژگیهای جدید را به زبان اضافه کرد، از جمله اشیاء، مراجع، متغیرهای واژگانی (من) و ماژولها. مهمتر از همه، ماژولها مکانیسمی برای گسترش زبان را بدون اصلاح مترجم ارائه دادند. این ویژگی به مترجم اصلی کمک کرد تا تثبیت شود. حتی بسیاری از برنامه نویسان معمولی Perl را قادر به اضافه کردن ویژگیهای جدید به زبان ساخت.
Perl 5.001 در تاریخ ۱۳ مارس ۱۹۹۵ منتشر شد. Perl 5.002 در تاریخ ۲۹ فوریه ۱۹۹۶ با ویژگیهای جدید نمونههای اولیه منتشر شد. این به نویسندگان ماژول اجازه میدهد تا سابروتینها را اجرا کنند. پرل ۵٫۰۰۳ در تاریخ ۲۵ ژوئن ۱۹۹۶ منتشر شد.
یکی از مهمترین رویدادهای تاریخ Perl 5 که خارج از زبان مناسب بود و ناشی از حمایت ماژول آن بود. در ۲۶ اکتبر ۱۹۹۵، شبکه جامع پرل آرشیو (CPAN) به عنوان مخزن برای ماژولهای Perl و خود Perl ایجاد شد؛ از ماه مه سال ۲۰۱۷، بیش از ۱۸۵۱۷۸ ماژول در ۳۵۱۹۰ توزیع منتشر شدهاست که توسط بیش از ۱۳۷۱۷۱ نوشتار نوشته شدهاست و در بیش از ۲۴۵ مکان در سراسر جهان بازتاب یافتهاست.[7]
Perl 5.004 در تاریخ ۱۵ مه ۱۹۹۷ منتشر شد و از جمله موارد دیگر بسته UNIVERSAL است که Perl را یک شیء پایهای میداند که تمام کلاسها بهطور خودکار مشتق شده و توانایی درخواست نسخههای ماژولها را دارد. یکی دیگر از پیشرفتهای مهم، شامل قرار دادن ماژول CGI.pm بود[6] که به محبوبیت پرل به عنوان یک زبان برنامهنویسی CGI کمک کرد.
در حال حاضر Perl نیز در حال اجرا تحت ویندوز مایکروسافت و چند سیستم عامل دیگر است.[6]
پرل ۵٫۰۰۵ در تاریخ ۲۲ ژوئیه ۱۹۹۸ منتشر شد. این نسخه شامل چندین پیشرفت در موتور regex، اپراتور نقل قول qr // regex، انتخاب بزرگی از دیگر ماژولهای اصلی جدید، و پشتیبانی از چندین سیستم عامل دیگر، از جمله BeOS اضافه شدهاست.[8]
پونی
پونی(انگلیسی PONIE) یک کلمه مخفف برای کلمات " پرل در روی موتور داخلی جدید " است. پروژه پونی از سال ۲۰۰۳ تا سال ۲۰۰۶ و به عنوان پلی بین پرل نسخه ۵ و پرل نسخه ۶ وجود داشت. این پروژه تلاشی بود برای بازنویسی مفسر نسخه ۵ به شکلی که بتوان آن را بر روی پاروت، ماشین مجازی نسخه ۶ اجرا کرد. هدف از پروژه تضمین آیندهای برای میلیونها خط برنامه موجود نسخه ۵ بود که در اختیاران هزاران شرکت مختلف در سراسر جهان قرار داشت.[9]
نام
پرل در اصل به نام «مروارید» نامگذاری شد. Wall میخواست زبان را به عنوان یک نام کوتاه با مفاهیم مثبت معرفی کند؛ او ادعا میکند که هر واژه سه و چهار حرف را در فرهنگ لغت در نظر میگیرد. او همچنین نام آن را پس از همسرش گلوریا ذکر کرد. Wall زبان برنامهنویسی Pearl را قبل از انتشار رسمی پرل کشف کرد و املای نام را تغییر داد.[10] هنگام اشاره به زبان، نام بهطور طبیعی به عنوان اسم مستعار (Perl) نامیده میشود. هنگامی که به مترجم خود برنامه مراجعه می کنید،اغلب نام غیرقابل پذیرش (perl)است، زیرا اکثر سیستمهای فایل یونیکس حساس به حروف هستند. قبل از انتشار اولین نسخه زبان برنامهنویسی Perl ، معمولاً به زبان به عنوان perl اشاره شد؛ با این حال، رندال الکس شوارتز، نام زبان را در این کتاب بزرگتر کرد تا آن را در هنگام تایپ بهتر بیان کند.[11]
نماد شتر
برنامهنویسی Perl که توسط O'Reilly Media منتشر شدهاست، تصویری از یک شتر برهنه در پوشش دارد و معمولاً «کتاب شتر» نامیده میشود.[12] این تصویر شتر به نماد غیررسمی پرل تبدیل شدهاست و همچنین یک نشان هکر عمومی است که در تی شرت و دیگر اقلام لباس ظاهر میشود.O'Reilly تصویر را به عنوان علامت تجاری اداره میکند، اما مجوز آن را برای استفاده غیر تجاری میدهد، و فقط نیاز به تأیید و پیوند به www.perl.com دارد. مجوز برای استفاده تجاری بر اساس یک مورد مورد بررسی قرار میگیرد. O'Reilly همچنین لوگوهای "Republic of Perl" برای سایتهای غیر تجاری و "Powered by Perl" را برای هر سایت ای که از Perl استفاده میکند، فراهم میکند.[13]
نماد پیاز
بنیاد پرل صاحب یک نماد جایگزین، یک پیاز است که به شرکتهای تابعه آن، Perl Mongers, PerlMonks, Perl.org و دیگران مجوز میدهد. نماد یک پیانو بصری در پیاز مروارید است.[14]
مرور
به گفته وال، پرل دارای دو شعار است. اول این است که «بیش از یک راه برای انجام این کار وجود دارد»، معمولاً به نام TMTOWTDI شناخته میشود. شعار دوم این است: «چیزهای آسان باید آسان و سخت باشد».
ویژگیها
ساختار کلی Perl بهطور گستردهای از C استفاده میشود. Perl در طبیعت، با متغیرها، عبارتها، بلوکهای جدا شده برش، ساختارهای کنترل و سابروتینها است. پرل نیز ویژگیهای برنامهنویسی پوسته را میگیرد. همه متغیرها با sigilهای پیشرو مشخص شدهاند، که به متغیرها اجازه میدهد به صورت مستقیم در رشتهها تکرار شوند. با این حال، بر خلاف پوسته، پرل با استفاده از sigils در تمام دسترسی به متغیرها، و بر خلاف اکثر زبانهای برنامهنویسی دیگر که از sigils استفاده میکنند، sigil نوع متغیر را مشخص نمیکند، بلکه نوع بیان است. به عنوان مثال، برای دسترسی به یک لیست از مقادیر در هش، sigil برای یک آرایه ("@") استفاده میشود، نه sigil برای یک هش ("٪"). پرل همچنین دارای بسیاری از توابع ساخته شدهاست که ابزارهایی هستند که اغلب در برنامهنویسی پوسته استفاده میشوند (اگر چه بسیاری از این ابزارها توسط برنامههای خارجی از پوسته اجرا میشوند) مانند مرتبسازی و فراخوانی امکانات سیستم عامل.
طراحی
طراحی پرل میتواند به عنوان یک پاسخ به سه رشته گسترده در صنعت رایانه شناخته شود: هزینههای سختافزاری سقوط، افزایش هزینههای کار و بهبود تکنولوژی کامپایلر. بسیاری از زبانهای رایج قبلی مانند Fortran و C به منظور استفاده کارآمد از سختافزار رایانههای گرانقیمت استفاده میشود. در مقابل، Perl طراحی شده بود تا برنامه نویسان کامپیوتر بتوانند برنامهها را سریع تر و راحتتر بنویسند.
پیادهسازی
پرل به عنوان یک مترجم اصلی، نوشته شده در C، همراه با مجموعهای بزرگ از ماژولها، نوشته شده در Perl و C اجرا میشود. مترجم را میتوان به کتابخانه پیوند داد. تقریباً ۵۰۰ ماژول در توزیع وجود دارد که شامل ۲۰۰٬۰۰۰ خط Perl و ۳۵۰٬۰۰۰ خط دیگر از کد C است (بسیاری از کد C در ماژولها شامل جداول رمزگذاری کاراکتر هستند).
مترجم یک معماری شی گرا دارد. تمام عناصر زبان اسکالر Perl، آرایهها، هشها، coderefs، دستههای فایل - در مفسر توسط C ساختار نشان داده شدهاست. عملیات در این ساختارها توسط مجموعهای بزرگ از ماکرو، تایپدیف و توابع تعریف شدهاست. این API Perl C را تشکیل میدهد. API Perl میتواند به uninitiated خجالت بکشد، اما نقاط ورود آن یک طرح نامگذاری سازگار را دنبال میکنند که راهنمایی را برای کسانی که از آن استفاده میکنند هدایت میکند.
زندگی یک مترجم پرل تقریباً به یک فاز کامپایل و مرحله اجرا تقسیم میشود. در Perl، مراحل اصلی مراحل زندگی مترجم است. هر مترجم فقط یک بار در هر فاز میرود و مراحل در دنباله ثابت دنبال میشوند.[15] اغلب آنچه در فرایند کامپیوتر پرل اتفاق میافتد کامپیوتر است و اکثر آنچه که در مرحله اجرا در پرو رخ میدهد اعدام است اما استثنائاً قابل توجهی وجود دارد. پرل استفاده مهمی از قابلیت آن برای اجرای کد پرل در طی مرحله کامپایل میکند. پرل همچنین کامپایل را به مرحله اجرا متوقف میکند. شرایطی که نشان دهنده نوع پردازش است که در هر لحظه اتفاق میافتد. Perl در زمان کامپایل بیشترین امتیاز را در طی مرحله کامپایل دارد، اما زمان کامپایل نیز میتواند در طول مرحله اجرا وارد شود. زمان کامپایل برای کد در یک آرگومان رشته به داخل eval ساخته شدهاست که در مرحله اجرا رخ میدهد. Perl اغلب در زمان اجرا در مرحله فشردهسازی قرار دارد و بیشترین دوره اجرا را در زمان اجرا صرف میکند. کد در بلوکهای BEGIN اجرا میشود. در زمان کامپایل، مترجم، کد پپرل را به یک درخت نحو تجزیه میکند. در زمان اجرا، برنامه را با راه رفتن درخت اجرا میکند. متن فقط یک بار تجزیه میشود و درخت نحوی برای بهینهسازی از قبل اجرا میشود، بهطوریکه اجرا نسبتاً کارآمد است. بهینهسازی زمانبندی کامپایل در درخت نحو شامل انتشار ثابت و لغزش است، اما بهینهسازی peephole نیز انجام میشود. پرل یک گرامر تورینگ کامل است، زیرا تجزیه میتواند توسط کد زمان اجرای اجرا شده در طول مرحله کامپایل اجرا شود؛ بنابراین، Perl را نمیتوان با استفاده از ترکیبی Lex / Yacc Lexer / Parser پردازش کرد. در عوض، مترجم لکسور خود را اجرا میکند، که با یک اصلاحکننده گنو اصلاح شده و برای حل ابهامات در زبان هماهنگ شدهاست.
اغلب گفته میشود «تنها perl میتواند Perl را تجزیه کند»، به این معنی است که تنها مترجم پرل (perl) میتواند زبان پرل (Perl) را تجزیه کند، اما حتی اینطور نیست، بهطور کلی درست است. از آنجا که مترجم پرل میتواند یک ماشین تورینگ را در فاز کامپایل خود شبیهسازی کند، باید به منظور تکمیل تجزیه در هر مورد، مشکل تصمیمگیری را حل کند. این یک نتیجه طولانی مدت است که مشکل متوقف کردن غیرقابل تشخیص است و بنابراین حتی Perl هم همیشه میتواند Perl را تجزیه کند. Perl گزینه غیرمعمولی برای دسترسی کاربر به قدرت برنامهنویسی کامل خود را در فاز کامپایل خود میدهد. هزینه در نظر خلوص نظری بالا است، اما نارسایی عملی به نظر میرسد نادر است. برنامههای دیگری که به تجزیه Perl پرداختهاند، مانند تجزیه و تحلیلهای منبع کد و تکرار خودکار، باید نه تنها با ساختارهای مبهم نحو، بلکه با عدم پذیرفتگی تجزیه Perl در مورد کلی بحث میکنند.[16] پرل با بیش از ۲۵۰٬۰۰۰ آزمون عملکردی برای زبان اصلی Perl و بیش از ۲۵۰٬۰۰۰ آزمون عملکردی برای ماژولهای اصلی توزیع شدهاست. اینها به عنوان بخشی از فرایند ساخت و ساز طبیعی عمل میکنند و تمرین مترجم و ماژولهای اصلی آن را بهطور گستردهای انجام میدهند. توسعه دهندگان پرل بر تستهای عملکردی تکیه میکنند تا اطمینان حاصل شود که تغییرات به مترجم، اشکالات نرمافزاری را ارائه نمیدهند؛ علاوه بر این، کاربران پرل که میبینند که مترجم آزمونهای عملکردی خود را بر روی سیستم خود میگذارد میتواند سطح بالایی از اعتماد به نفس داشته باشد که به درستی کار میکند.
دسترسی
Perl دو مجوز تحت هر دو مجوز هنری و مجوز عمومی GNU دارد که برای اکثر سیستم عاملها در دسترس است. این به ویژه در سیستمPOSIX یا دیگر نرمافزارهای یونیکس کامپایل کرد.[17]
به دلیل تغییرهای غیرمعمول مورد نیاز برای محیط سیستم عامل مک، یک پورت خاص به نام MacPerl بهطور مستقل حمل میشود.[18]
شبکه جامع پرل آرشیو فهرست کاملی از سیستم عاملهای پشتیبانی شده با لینکهای مربوط به توزیعهایی که در هر یک از آنها موجود است، میباشد. CPAN همچنین منبع برای ماژولهای پرل قابل دسترس است که بخشی از توزیع هسته پرل نیستند.[19]
ویندوز
کاربران مایکروسافت ویندوز معمولاً یکی از توزیعهای دودویی بومی Perl را برای Win32، اغلب Strawberry یا Active Perl نصب میکنند. کامپایل Perl از کد منبع در ویندوز امکانپذیر است، اما اکثر تأسیسات کامپایلر C مورد نیاز و ابزار ایجاد نمیکنند. این باعث میشود که ماژولهای CPAN نصب شود، مخصوصاً آنهایی که در C نوشته شدهاند.
Active Perl یک توزیع منبع بسته از Active State است که نسخههای معمولی را دارد که انتشار Perl هسته را پیگیری میکند. توزیع همچنین شامل مدیریت بستههای پرل (PPM),[20] یک ابزار محبوب برای نصب، حذف، ارتقاء و مدیریت استفاده از ماژولهای پرل معمولی است.[21] همچنین شامل Perl Script میشود که یک موتور ویندوز اسکریپت (WSH) است که زبان پرل را اجرا میکند. ویژوال پرل ابزار Active State است که Perl را به مجموعه توسعه ویژوال استودیو اضافه میکند.
Strawberry perl پرل توزیع منبع باز برای ویندوز است. این نسخه از ماه ژانویه سال ۲۰۰۸ به صورت منظم، سهماهه منتشر شدهاست، از جملهای یونیکس و یونیکس شایع است، اما آن را به اکثر سیستم عامل مدرن (و بسیاری از منسوخ) منتقل کردهاست. با استفاده از تنها شش استثناء گزارش شده، Perl را میتوان از کد منبع در تمامی پلتفرمهای سازگار با ه ماژولهای جدید به عنوان بازخورد و درخواستهای وارد شدهاست. Strawberry Perl قصد دارد قادر به نصب ماژولهایی مانند توزیعهای استاندارد Perl در سیستم عاملهای دیگر، از جمله جمعآوری ماژولهای XS شود.
لایه شبیهسازی Cygwin روش دیگری برای اجرای Perl در ویندوز است. Cygwin یک محیط یونیکس را در ویندوز فراهم میکند و هر دو Perl و CPAN به عنوان بستههای استاندارد پیشساخته شده در برنامه راه اندازی Cygwin در دسترس هستند. از آنجا که Cygwin همچنین شامل GCC است، کامپایل Perl از منبع نیز امکانپذیر است.
اجرایی perl در چندین کیت منابع Windows در دایرکتوری با سایر ابزارهای اسکریپتینگ گنجانده شدهاست
پیادهسازی پرل همراه با MKS TOOLKIT و UWIN است.
پایگاه داده
توانایی انتقال متن Perl را میتوان برای تولید پرس و جوهای SQL استفاده کرد. آرایهها، هشها و مدیریت حافظه خودکار، جمعآوری و پردازش دادههای بازگشتی را آسان میکند. برای مثال، در API برنامه کاربردی Perl DBI Tim Bunce، استدلالهای API میتواند متن درخواستهای SQL باشد؛ بنابراین ممکن است در یک زمان با چندین زبان برنامه ایجاد کرد (به عنوان مثال ایجاد یک صفحه وب با استفاده از HTML، جاوا اسکریپت و SQL در یک سند). استفاده ازمتغیر interpolation پرل باعث میشود هر یک از پرس و جوهای SQL بهینه شوند. مشخص کردن آرایهها یا هشهای پرل به عنوان ساختارهایی که بهطور برنامهریزی شده مجموعه دادههای حاصل از هر پرس و جو SQL را نگه دارند، اجازه میدهد تا یک مکانیزم سطح بالا برای رسیدگی به مقادیر زیاد دادهها برای پردازش پس از یک زیر برنامه پرل ایجاد شود. در نسخههای اولیه پرل، رابطهای پایگاه داده توسط ارتباط مجدد مترجم با یک کتابخانه پایگاه داده مشتری ایجاد میشد. این به اندازهای دشوار بود که فقط برای بعضی از پایگاههای مهم مورد استفاده قرار میگرفت، و این باعث محدود شدن اجرای perl در نتیجهٔ استفاده از یک رابط پایگاه داده، یک زمان شود.[22]
در Perl 5، اینترفیسهای پایگاه داده توسط ماژولهای DBI پرل اجرا میشوند. ماژول DBI (رابط پایگاه داده) یک رابط مستقل از پایگاه داده را به برنامههای پرل ارائه میدهد، در حالی که ماژول DBD (راننده پایگاه داده) اطلاعات مربوط به دسترسی به حدود ۵۰ پایگاه داده متفاوت را اداره میکند؛ رانندگان DBD برای اکثر پایگاههای ANSI SQL وجود دارد.
DBI ذخیرهسازی برای دستههای پایگاه داده و نمایش دادهها را فراهم میکند، که میتواند عملکرد بسیار زیادی را در محیطهای اجرای طولانی مدت مانند mod perl بهبود بخشد، کمک به سیستمهای با حجم بالا، به عنوان یک اثر Slashdot، باعث جلوگیری از حمل بار میشود.[23]
در برنامههای کاربردی مدرن پرل، به ویژه آنهایی که با استفاده از چارچوب وب مانند Catalyst نوشته میشوند، ماژول DBI اغلب بهطور غیرمستقیم از طریق نمایشگرهای شیء-ارتباطی مانند DBIx :: Class, Class :: DBI یا Rose :: DB :: Object که پرس و جوهای SQL تولید میکنند، استفاده میشود.
بهینهسازی
از آنجا که Perl یک زبان تفسیر است، میتواند مشکلها را هنگامی که کارایی بسیار مهم است، ارائه دهد. در چنین شرایطی، مهمترین برنامهها میتوانند در زبانهای دیگر (مانند C) نوشته شوند، که میتوانند از طریق ماژولهای ساده Inline یا مکانیسم XS پیچیدهتر، اما انعطافپذیرتر به Perl متصل شوند.[24]
پرل ۶
Jon Orwant در کنفرانس ۲۰۰۰ پرل، پروندهای برای یک زبان ابتکاری جدید ساخت. این به تصمیمگیری برای شروع کار بر روی طراحی مجدد زبان، به نام پرل ۶. منجر شد. پیشنهادها مربوط به ویژگیهای جدید زبان از جامعه پرل بهطور گسترده درخواست شد که بیش از 300 RFC را ارائه میداد.[25]
wall چند سال بعد به تشخیص RFCها و ترکیب آنها به یک چارچوب منسجم برای پرل ۶ مشغول شد. او طراحی خود را برای Perl 6 در مجموعهای از اسناد به نام "apocalypses" ارائه کردهاست که شماره آن مربوط به فصلهای برنامهنویسی پرل میباشد. از ژانویه ۲۰۱۱، مشخصات در حال توسعه پرل ۶ در اسناد طراحی به نام Synopses - شمارهگذاری شدهاست که به Apocalypse مربوط است.[26]
Perl 6 در نظر گرفته نشده که با نسخههای قبلی سازگار باشد، اگر چه یک حالت سازگاری وجود خواهد داشت. پرل ۶ و پرل ۵ زبانهای متمایز با یک قبیله مشترک هستند.
کار پایاننامه بردلی م. کوهن تحت نظارت لری وال، امکان استفاده از ماشین مجازی جاوا را به عنوان زمان اجرا برای Perl در نظر گرفت. پایاننامه کوهن نشان داد که این رویکرد مشکل ساز است. در سال ۲۰۰۱ تصمیم گرفت که پرل ۶ بر روی ماشین مجازی متقابل زبان Parrot اجرا شود. این بدان معنی است که زبانهای دیگر که با هدف قرار دادن Parrot دسترسی پیدا میکنند به CPAN دسترسی پیدا میکنند و اجازه میدهند سطح پیشرفته زبان را افزایش دهند.
در سال ۲۰۰۵، آدری تانگ پروژه Pugs را ایجاد کرد، اجرای Perl 6 در Haskell. این عمل به عنوان یک پلت فرم آزمون برای زبان پرل ۶ (به غیر از توسعه اجرای واقعی) عمل میکند و به طراحان زبان اجازه میدهد تا آنها را کشف کند. پروژه Pugs یک انجمن متقابل زبان Perl / Haskell فعال را در اطراف کانال IRC # perl6 freenode ایجاد کرد.
از سال ۲۰۱۲، تعدادی از ویژگیهای زبان پرل ۶ شباهت به Haskell را نشان میدهند.[27]
در سال ۲۰۱۲، Perl 6 توسعه مراکز عمدتاً در حدود دو کامپایلر:
Rakudo Perl 6، یک پیادهسازی بر روی ماشین مجازی Parrot و ماشین مجازی جاوا است. توسعه دهندگان همچنین بر روی MoarVM، یک ماشین مجازی مبتنی بر زبان برنامهنویسی C بهطور خاص برای Rakudo کار میکنند.[28]
Niecza، که به Runtime Common Language اهمیت میدهد.
خصوصتهای پرل ۵
توسعه پرل ۵ همچنان ادامه دارد. پرل ۵٫۱۲٫۰ در آوریل ۲۰۱۰ با برخی از ویژگیهای جدید تحت تأثیر طراحی Perl 6 و به دنبال آن Perl 5.14.1 (منتشر شد در تاریخ ۱۷ ژوئن ۲۰۱۱)، Perl 5.16.1 منتشر شد[29](در ماه اوت منتشر شد) و Perl 5.18.0 (منتشر شده در تاریخ ۱۸ مه ۲۰۱۳). نسخههای توسعه پرل ۵ بهطور ماهانه منتشر میشوند و انتشارهای عمده یکبار در سال ارائه میشوند.[30]
برنامههای آینده برای پرل ۵ شامل ساخت زبان اصلی برای گسترش از ماژولها و ارائه یک پروتکل متادیت کوچک کوچک و گسترده در هسته است.
نسبت نسبی جستجوهای اینترنتی برای برنامهنویسی Perl نسبت به جستجوهای مشابه برای زبانهای برنامهنویسی دیگر، بهطور پیوسته از حدود ۱۰ درصد در سال ۲۰۰۵ به حدود ۲ درصد در سال ۲۰۱۱ کاهش یافتهاست و از سال گذشته در حدود ۲ درصد بودهاست.[31]
قابلیتها
یکی از کاربردهای مهم زبان برنامهنویسی پرل در نوشتن اکسپلوییتها و کدهای مخرب است. این زبان برنامهنویسی پیشینهای قدیمی در یونیکس دارد. اما عمر آن در ویندوز به ۷ سال هم نمیرسید. بهطوریکه زبان پرل را زبانی جدا نشدنی از یونیکس میدانند.
کاربرد پرل
پرل امروزه در زمینههای هوش مصنوعی، ژنتیک، نظامی، تحقیقاتی، صنعتی بهطور گستردهای کاربرد دارد. نوشتن یک بانک اطلاعاتی، صفحهگسترده یا یک وبسرور شاید با پرل کار عاقلانهای به نظر نرسد، ولی امکانپذیر است.
پرل به عنوان یک زبان چسبنده (Glue Language)
پرل به عنوان یک زبان چسبنده میتواند در زبانهای دیگر مورد استفاده قرار گیرد. بهطور مثال میتوان در برنامههای چارچوب داتنت از پرل برای پردازش متن یا هر چیز دیگری استفاده کرد. این قابلیت تنها به.NET محدود نمیشود و پرل را میتوان در زبانهای دیگر برنامهنویسی بدون در نظر گرفتن پلتفرم ان استفاده کرد.
پرل به عنوان یک زبان کراس پلتفرم (Cross Platform)
نرمافزاری که با زبان پرل تحت سیستمعامل لینوکس یا مک اواس نوشته شده، روی سیستمعامل مایکروسافت ویندوز و یونیکس هم اجرا میشود. قابلیت چندسکویی امکان توسعه نرمافزار را بر روی هر سیستمعاملی فراهم میکند.
پرل و CGI
با پا به عرصه گذاشتن CGI به صفحات وب زبان پرل به خاطر قدرت بالا در پردازش متن و تطبیق الگو و کار با عبارتها باقاعده (Regular Expressions)، در جمله زبانهایی قرار گرفت که بهطور وسیعی برای نوشتن CGI بکار گرفته میشود. در اینصورت یک سیستم برنامهنویسی پویای تحت وب و با استفاده از تکنولوژی CGI پیادهسازی میشود.
نکتهای که باعث محبوبیت زبان پرل در میان برنامه نویسان شدهاست متنباز بودن این زبان میباشد.
ساختار زبان
نمونه برنامه
در نمونههای قبل تر پرل برای نوشتن در برنامه به صورت زیر عمل میشده:
# !/usr/bin/perl
print "Hello world!";
در نمونههای جدیدتر پرل که از دستور say
پشتیبانی میکردند یک روش دستور زیر است:
# !/usr/bin/perl
use 5.01;
say "Hello world!";
برای نوشتن بهتر کد برنامه نیاز به کارهای بیشتری مثل اضافه کردن use strict;
و use warnings;
به برنامه است:
use strict;
use warnings;
print "Hello World!\n";
این نمونه پیچیده تری از برنامه پرل است که به صورت معکوس ثانیهها را تا محدوده مورد نظر میشمارد.
#!/usr/bin/perl
use strict;
use warnings;
use IO::Handle;
my ( $remaining, $total );
$remaining = $total = shift(@ARGV);
STDOUT->autoflush(1);
while ( $remaining ) {
printf ( "Remaining %s/%s \r", $remaining--, $total );
sleep 1;
}
print "\n";
مفسر پرل میتواند به عنوان اجرای دستورهای یک خطی از طریق خط دستور نیز به کار رود. مثال زیر میتواند عبارت "Bob" را در تمام فایلهایی که پسوند "txt." دارند و در پوشه برنامه فعلی قرار گرفتهاند را به "Robert" تبدیل کند. (در صورت اجرا در محیط مناسب مانند Bash)
$ perl -i.bak -lp -e 's/Bob/Robert/g' *.txt
منابع
- "About Perl". perl.org. Retrieved 2013-04-20.
"Perl" is a family of languages, "Perl 6" is part of the family, but it is a separate language that has its own development team. Its existence has no significant impact on the continuing development of "Perl 5".
- Lapworth, Leo. "General Questions About Perl". Perl FAQ. Perl.org. Retrieved February 24, 2012.
- "perl(1): Practical Extraction/Report Language - Linux man page". Linux.die.net. Retrieved 2013-07-23.
- Sheppard, Doug (2000-10-16). "Beginner's Introduction to Perl". dev.perl.org. Retrieved 2011-01-08.
- "The Perl Programming Language - www.perl.org". Retrieved 2017-06-22.
- «Perl programming documentation - perldoc.perl.org». دریافتشده در ۲۰۱۷-۰۶-۲۲.
- "The Comprehensive Perl Archive Network - www.cpan.org". Retrieved 2017-06-22.
- Patwardhan, Nathan; Siever, Ellen; Spainhour, Stephen (2002). Perl in a Nutshell.
- Geoff Broadwell (August 8, 2005), OSCON 4.4: Inside Ponie, the Bridge from Perl 5 to Perl 6, O'Reilly ONLamp Blog
- Richardson, Marjorie (1999-05-01). "Larry Wall, the Guru of Perl". Linux Journal. Retrieved 2011-01-03.
- "perlfaq1: What's the difference between "perl" and "Perl"?". perldoc.perl.org - Perl 5 version 12.2 documentation.
- Schwartz, Randal L; Phoenix, Tom; Foy, Brian. Learning Perl, Third Edition. ISBN 978-0-596-00132-2.
- «"The Perl Camel Usage and Trademark Information". O'Reilly Media. Retrieved 2011-01-09».
- «Gillmore, Dan (1998-10-25). "Republic Of Perl". Chicago Tribune. Retrieved 2011-01-10».
- A description of the Perl 5 interpreter can be found in Programming Perl, 3rd Ed. , chapter 18. See particularly page 467, which carefully distinguishes run phase and compile phase from run time and compile time. Perl "time" and "phase" are often confused.
- "Rice's Theorem". The Perl Review. 4 (3): 23–29. Summer 2008. and "Perl is Undecidable". The Perl Review. 5 (0): 7–11. Fall 2008. , available online at Kegler, Jeffrey. "Perl and Undecidability".
- Hietaniemi, Jarkko (1998). "Perl Ports (Binary Distributions)". CPAN.org.
- "The MacPerl Pages".
- "Perl Ports (Binary Distributions).
- "Using PPM". ActiveState Software.
- "ActivePerl is Perl for Windows, Mac, Linux, AIX, HP-UX & Solaris". ActiveState Software.
- Descartes, Alligator; Bunce, Tim (2000). Programming the Perl DBI : [database programming with Perl] (1 ed.). Beijing [u.a.]: O'Reilly. ISBN 1-56592-699-4.
- Bekman, Stas. "Efficient Work with Databases under mod_perl". Retrieved 2007-09-01.
- Ingerson, Brian. "Inline - metacpan.org". CPAN. Archived from the original on June 13, 2013.
- Torkington, Nathan. "Transcription of Larry's talk". nntp.perl.org. Retrieved 2011-01-25.
- " "Official Perl 6 Documentation". The Perl 6 Project. Retrieved 2011-01-25.
- "Official Perl 6 Documentation". The Perl 6 Project. Retrieved 2011-01-25.
- Worthington, Jonathan. "Rakudo JVM News: More tests, plus Thread and Promise prototypes". 6guts. Retrieved July 24, 2013.
- "The unstoppable Perl release train?.
- perl 5.16.1 released!". 2012-08-09. Retrieved 2012-08-26.
- TIOBE Software Index (2013). "TIOBE Programming Community Index Perl".
مشارکتکنندگان ویکیپدیا. «Perl». در دانشنامهٔ ویکیپدیای انگلیسی، بازبینیشده در ۱۸ ژوئن ۲۰۱۳.