Perl language structure
پرل پروگرامنگ زبان کا ڈھانچہ زبان کے نحو اصولوں اور پروگراموں کو منظم کرنے کے عمومی طریقوں دونوں پر مشتمل ہے۔ پرل کے ڈیزائن کے فلسفے کا اظہار عام طور پر حوالہ کردہ مقصد "اسے کرنے کے ایک سے زیادہ طریقے ہیں" میں کیا گیا ہے۔ ایک کثیر پیراڈائم، متحرک طور پر ٹائپ شدہ زبان کے طور پر، پرل پروگرام کے ڈیزائن میں بڑی حد تک لچک کی اجازت دیتا ہے۔ پرل ماڈیولرائزیشن کی بھی حوصلہ افزائی کرتا ہے ؛ یہ اس کی یونکس جڑوں کے جزو پر مبنی ڈیزائن ڈھانچے سے منسوب کیا گیا ہے، اور یہ سی پی اے این آرکائیو کے سائز کے لیے ذمہ دار ہے، جو 100,000 سے زیادہ ماڈیولز کا کمیونٹی کے زیر انتظام ذخیرہ ہے۔ بنیادی نحو پرل میں، کم از کم ہیلو ورلڈ پروگرام کو اس طرح لکھا جا سکتا ہے: "ہیلو، ورلڈ! \n" پرنٹ کریں یہ سٹرنگ ہیلو، ورلڈ پرنٹ کرتا ہے! اور ایک نئی لکیر، علامتی طور پر ایک این کردار کے ذریعے ظاہر کی جاتی ہے جس کی تشریح پچھلے فرار کردار (ایک بیک سلیش) کے ذریعے تبدیل کی جاتی ہے۔ ورژن 5.10 کے بعد سے، نیا 'سیے' بلٹن اسی اثر کو اور بھی آسانی سے پیدا کرتا ہے: "ہیلو، ورلڈ!" ایک پورے پرل پروگرام کو پرل کے لیے کمانڈ لائن پیرامیٹر کے طور پر بھی متعین کیا جا سکتا ہے، لہذا اسی پروگرام کو کمانڈ لائن سے بھی انجام دیا جا سکتا ہے (مثال کے طور پر یونکس کے لیے دکھایا گیا ہے): $perl-e 'پرنٹ' ہیلو، ورلڈ! \n 'پروگرام کی کینونکل شکل قدرے زیادہ لفظی ہے: #!/usr/sin/perl پرنٹ "ہیلو، ورلڈ! \n" ؛ ہیش مارک کردار پرل میں ایک تبصرہ متعارف کراتا ہے، جو کوڈ کی لائن کے آخر تک چلتا ہے اور مرتب کرنے والا اسے نظر انداز کر دیتا ہے (سوائے ونڈوز کے)۔ یہاں استعمال کیا گیا تبصرہ ایک خاص قسم کا ہے: اسے شیبانگ لائن کہا جاتا ہے۔ یہ یونکس جیسے آپریٹنگ سسٹم کو پرل انٹرپریٹر کو تلاش کرنے کے لیے کہتا ہے، جس سے پرل کا واضح طور پر ذکر کیے بغیر پروگرام کو کال کرنا ممکن ہو جاتا ہے۔ (نوٹ کریں کہ مائیکروسافٹ ونڈوز سسٹمز پر، پرل پروگراموں کو عام طور پر. pl ایکسٹینشن کو پرل انٹرپریٹر کے ساتھ جوڑ کر استعمال کیا جاتا ہے۔ ایسے حالات سے نمٹنے کے لیے، پرل شیبانگ لائن کا پتہ لگاتا ہے اور اسے سوئچ کے لیے تجزیہ کرتا ہے۔) کینونکل شکل میں دوسری لائن میں ایک سیمی کولن شامل ہے، جو پرل میں بیانات کو الگ کرنے کے لیے استعمال ہوتا ہے۔ بلاک یا فائل میں صرف ایک بیان کے ساتھ، ایک جداکار غیر ضروری ہے، لہذا اسے پروگرام کی کم سے کم شکل سے یا زیادہ عام طور پر کسی بھی بلاک یا فائل میں حتمی بیان سے خارج کیا جا سکتا ہے۔ کینونکل فارم میں یہ شامل ہے، کیونکہ ہر بیان کو ختم کرنا عام بات ہے یہاں تک کہ جب ایسا کرنا غیر ضروری ہو، کیونکہ اس سے ترمیم کرنا آسان ہو جاتا ہے: کوڈ کو سیمی کولن کو ایڈجسٹ کیے بغیر بلاک یا فائل کے آخر میں شامل کیا جا سکتا ہے، یا اس سے دور منتقل کیا جا سکتا ہے۔ پرل کا ورژن 5.10 ایک سی فنکشن متعارف کراتا ہے جو اس کے آؤٹ پٹ میں ایک نئی لائن کے کردار کو مضمر طور پر جوڑتا ہے، جس سے کم سے کم "ہیلو ورلڈ" پروگرام اور بھی چھوٹا ہو جاتا ہے: نئے 5.10 فنکشنز کو درآمد کرنے کے لیے 5.010 استعمال کریں ؛ #موجود ہونا ضروری ہے، نوٹ کریں کہ یہ 5.010 ہے نہ کہ 5.10 کہتے ہیں کہ 'ہیلو، ورلڈ!' ڈیٹا ٹائپز پرل میں ڈیٹا کی کئی بنیادی اقسام ہیں۔ سب سے زیادہ استعمال ہونے والے اور زیر بحث اسکیلر، صف، ہیش، فائل ہینڈل اور سبروٹین ہیں: اسکیلر ویلیوز سٹرنگ ویلیوز (لیٹرلز) کو حوالوں سے منسلک ہونا چاہیے۔ ڈبل کوٹس میں سٹرنگ کو بند کرنے سے متغیرات کی اقدار کی اجازت ملتی ہے جن کے نام سٹرنگ میں ظاہر ہوتے ہیں تاکہ وہ خود بخود سٹرنگ میں متغیر نام (یا انٹرپولیٹ کیا جائے) کو تبدیل کر سکیں۔ سنگل کوٹس میں سٹرنگ کو بند کرنا متغیر انٹرپولیشن کو روکتا ہے۔ مثال کے طور پر، اگر $نام "جم" ہے: تو پرنٹ ("میرا نام $نام ہے") "میرا نام جم ہے" پرنٹ کرے گا (دوہرے حوالوں کے اندر انٹرپولیشن)، لیکن پرنٹ ('میرا نام $نام ہے') "میرا نام $نام ہے" پرنٹ کرے گا (ایک اقتباس کے اندر کوئی انٹرپولیشن نہیں)۔ سٹرنگ میں ڈبل کوٹیشن مارک شامل کرنے کے لیے، اس سے پہلے بیک سلیش کے ساتھ یا سٹرنگ کو سنگل کوٹس میں منسلک کریں۔ ایک واحد کوٹیشن مارک کو شامل کرنے کے لیے، اس سے پہلے بیک سلیش لگائیں یا سٹرنگ کو ڈبل کوٹس میں منسلک کریں۔ سٹرنگز کو q اور qq اقتباس نما آپریٹرز کے ساتھ بھی حوالہ دیا جا سکتا ہے: 'یہ' اور q (یہ) ایک جیسے ہیں، "$یہ" اور qq ($یہ) ایک جیسے ہیں۔ آخر میں، ملٹی لائن سٹرنگز کو یہاں دستاویزات کا استعمال کرتے ہوئے بیان کیا جا سکتا ہے: $multilined _ stream = <<EOF ؛ یہ میرا ملٹی لائنڈ سٹرنگ نوٹ ہے کہ میں اسے لفظ "EOF" کے ساتھ ختم کر رہا ہوں۔ ای او ایف نمبروں (عددی مستقلات) کو اقتباس کی ضرورت نہیں ہے۔ پرل نمبروں کو تاروں میں تبدیل کرے گا اور اس کے برعکس اس سیاق و سباق پر منحصر ہے جس میں وہ استعمال ہوتے ہیں۔ جب تاروں کو نمبروں میں تبدیل کیا جاتا ہے، تو تاروں کے پیچھے والے غیر عددی حصوں کو خارج کر دیا جاتا ہے۔ اگر سٹرنگ کا کوئی اہم حصہ عددی نہیں ہے، تو سٹرنگ کو نمبر 0 میں تبدیل کر دیا جائے گا۔ مندرجہ ذیل مثال میں، سٹرنگ $n اور $m کو نمبروں کے طور پر مانا جاتا ہے۔ یہ کوڈ نمبر '5' پرنٹ کرتا ہے۔ متغیرات کی اقدار ایک جیسی رہتی ہیں۔ نوٹ کریں کہ پرل میں، + ہمیشہ عددی اضافی آپریٹر ہوتا ہے۔ سٹرنگ کنکیٹینشن آپریٹر پیریڈ ہے۔ $n = '3 سیب' ؛ $m = '2 سنتری' ؛ $n + $m پرنٹ کریں ؛ فریکشنل ویلیوز کو انٹیجر ویلیوز میں گول کرنے کے لیے فنکشن فراہم کیے جاتے ہیں: فریکشنل حصے کو کاٹ کر، صفر کی طرف گول کرنا ؛ پوزیکس:: چھت اور پوزیکس:: فرش گول ہمیشہ اوپر اور ہمیشہ نیچے، بالترتیب۔ پرنٹ ایف "% f" یا سپرنٹ ایف "% f" راؤنڈ آؤٹ ایون کی نمبر ٹو سٹرنگ تبدیلی، بینکروں کی راؤنڈنگ کا استعمال کرتی ہے۔ پرل کا ایک بولین سیاق و سباق بھی ہے جسے وہ مشروط بیانات کا جائزہ لینے میں استعمال کرتا ہے۔ مندرجہ ذیل اقدار کا اندازہ پرل میں غلط کے طور پر کیا جاتا ہے: $غلط = 0 ؛ #نمبر صفر $غلط = 0.0 ؛ #نمبر صفر بطور فلوٹ $غلط = 0b0 ؛ #بائنری میں نمبر صفر غلط = 0x0 ؛ #ہیکساڈیسیمل میں نمبر صفر $غلط = '0' ؛ #سٹرنگ صفر $غلط = "؛ #خالی سٹرنگ $غلط = () ؛ #خالی فہرست $غلط = undef ؛ #undef $غلط = 2-3+1 #سے واپسی کی قیمت 0 میں تبدیل ہو جاتی ہے جو" 0 "میں تبدیل ہو جاتی ہے لہذا یہ غلط ہے۔ اس میں "0 لیکن سچ" کی عجیب خود وضاحتی لفظی تار شامل ہے، جو حقیقت میں ایک عدد کے طور پر 0 ہے، لیکن جب بولین کے طور پر استعمال کیا جائے تو سچ ہے۔ تمام غیر عددی تاروں میں بھی یہ خاصیت ہوتی ہے، لیکن اس مخصوص تار کو پرل کے ذریعے عددی انتباہ کے بغیر کاٹ دیا جاتا ہے۔ اس سٹرنگ کا ایک کم واضح لیکن زیادہ تصوراتی طور پر پورٹیبل ورژن '0E0' یا '0e0' ہے، جس کا انحصار ان حروف پر نہیں ہے جن کا اندازہ 0 کے طور پر کیا جا رہا ہے، کیونکہ '0E0' لفظی طور پر صفر گنا دس پاور صفر ہے۔ خالی ہیش {} بھی درست ہے ؛ اس تناظر میں {} ایک خالی بلاک نہیں ہے، کیونکہ پرل-ای 'پرنٹ ریف {}' ہاش واپس کرتا ہے۔ تشخیص شدہ بولین تاثرات بھی اسکیلر اقدار ہیں۔ دستاویزات اس بات کا وعدہ نہیں کرتی ہیں کہ صحیح یا غلط کی کون سی مخصوص قیمت واپس کی جائے گی۔ بہت سے بولین آپریٹر سچ کے لیے 1 اور غلط کے لیے خالی تار واپس کرتے ہیں۔ متعین () فنکشن اس بات کا تعین کرتا ہے کہ آیا کسی متغیر کی کوئی ویلیو سیٹ ہے۔ مندرجہ بالا مثالوں میں، تعریف شدہ ($false) undef کے علاوہ ہر قدر کے لیے درست ہے۔ اگر 1 یا 0 میں سے کسی ایک کی خاص طور پر ضرورت ہو تو مشروط آپریٹر کا استعمال کرتے ہوئے ایک واضح تبدیلی کی جا سکتی ہے: میرا $ریئل _ رزلٹ = $بولین _ رزلٹ؟ 1: 0 ؛ صف کی اقدار ایک صف کی قیمت (یا فہرست) کو اس کے عناصر کو درج کرکے متعین کیا جاتا ہے، کوما سے الگ کیا جاتا ہے، قوسین سے منسلک ہوتا ہے (کم از کم جہاں آپریٹر کی ترجیح کی ضرورت ہوتی ہے)۔ @scores = (32، 45، 16، 5) ؛ qw () اقتباس نما آپریٹر حوالہ جات اور کوما ٹائپ کیے بغیر تاروں کی فہرست کی تعریف کی اجازت دیتا ہے۔ قوسین کے بجائے تقریبا کسی بھی حد بندی کا استعمال کیا جا سکتا ہے۔ مندرجہ ذیل لائنیں مساوی ہیں: @names = ('بلی'، 'جو'، 'جم-باب') ؛ @names = qw (بلی جو جم-باب) ؛ اسپلٹ فنکشن تاروں کی ایک فہرست واپس کرتا ہے، جو ڈلیمیٹر سٹرنگ یا باقاعدہ اظہار کا استعمال کرتے ہوئے تار کے اظہار سے تقسیم ہوتے ہیں۔ @scores = تقسیم ('،'، '32,45,16، 5') ؛ فہرست کے انفرادی عناصر تک رسائی مربع بریکٹ میں عددی اشاریہ فراہم کرکے حاصل کی جاتی ہے۔ اسکیلر سگیل کا استعمال ضرور کیا جانا چاہیے۔ ذیلی فہرستیں (صف کے ٹکڑے) بھی مخصوص کی جا سکتی ہیں، بریکٹ میں عددی اشاریہ جات کی رینج یا فہرست کا استعمال کرتے ہوئے۔ اس معاملے میں ایرے سگیل کا استعمال کیا جاتا ہے۔ مثال کے طور پر، $مہینہ [3] "اپریل" ہے (صف میں پہلے عنصر کی انڈیکس ویلیو 0 ہے)، اور @month [4.6] ("مئی"، "جون"، "جولائی") ہے۔ ہیش ویلیوز پرل پروگرامر کلیدی/ویلیو جوڑوں کی فہرست سے ہیش (یا ایسوسی ایٹیو ایرے) کو شروع کر سکتے ہیں۔ اگر چابیاں کوما کے بجائے => آپریٹر (بعض اوقات فیٹ کوما کہا جاتا ہے) کے ساتھ اقدار سے الگ کی جاتی ہیں، تو وہ غیر حوالہ شدہ (ننگے الفاظ) ہو سکتی ہیں۔ مندرجہ ذیل لائنیں مساوی ہیں:% پسندیدہ = ('جو'، 'سرخ'، 'سام'، 'نیلا') ؛% پسندیدہ = (جو => 'سرخ'، سام => 'نیلا') ؛ ہیش میں انفرادی اقدار کو گھوبگھرالی قوسین میں متعلقہ کلید فراہم کرکے حاصل کیا جاتا ہے۔ $سگیل رسائی شدہ عنصر کی شناخت اسکیلر کے طور پر کرتا ہے۔ مثال کے طور پر، $پسندیدہ {Joe} 'سرخ' کے برابر ہے۔ ایک ہیش کو انفرادی طور پر اس کی اقدار ترتیب دے کر بھی شروع کیا جا سکتا ہے: $پسندیدہ {جو} = 'سرخ' ؛ $پسندیدہ {سام} = 'نیلا' ؛ $پسندیدہ {آسکر} = 'سبز' ؛ اس کے بجائے @سگیل کا استعمال کرتے ہوئے متعدد عناصر تک رسائی حاصل کی جا سکتی ہے (نتیجہ کو فہرست کے طور پر شناخت کرنا)۔ مثال کے طور پر، @favorite {'جو'، 'سام'} برابر ہے ('سرخ'، 'نیلا')۔ فائل ہینڈل وسائل کو پڑھنے اور لکھنے تک رسائی فراہم کرتے ہیں۔ یہ اکثر ڈسک پر موجود فائلیں ہوتی ہیں، لیکن یہ ایک ڈیوائس، پائپ، یا اسکیلر ویلیو بھی ہو سکتی ہیں۔ اصل میں، فائل ہینڈل صرف پیکیج متغیرات کے ساتھ بنائے جا سکتے ہیں، اسے دیگر متغیرات سے ممتاز کرنے کے لیے ALL _ CAPS کنونشن کا استعمال کرتے ہوئے۔ پرل 5.6 اور نیا بھی ایک اسکیلر متغیر کو قبول کرتا ہے، جسے ایک نامزد فائل ہینڈل کی جگہ ایک گمنام فائل ہینڈل کے حوالے سے سیٹ (آٹو ویوفائیڈ) کیا جائے گا۔ ٹائپ گلوب ویلیوز ایک ٹائپ گلوب ویلیو ایک علامت ٹیبل انٹری ہے۔ ٹائپ گلوبز کا بنیادی استعمال علامتی ٹیبل عرفیت بنانا ہے۔ مثال کے طور پر: * PI =\3.141592653 ؛ #مستقل اسکیلر بنانا $PI * یہ = * کہ ؛ #تمام ڈیٹا ٹائپز کے لیے عرفیت بنانا 'یہ' تمام ڈیٹا ٹائپز کے لیے 'کہ' ارے فنکشنز کسی صف میں عناصر کی تعداد کا تعین یا تو اسکیلر سیاق و سباق میں صف کا جائزہ لے کر یا $#سگیل کی مدد سے کیا جا سکتا ہے۔ مؤخر الذکر صف میں آخری عنصر کا اشاریہ دیتا ہے، عناصر کی تعداد نہیں۔ تاثرات اسکیلر (@array) اور ($#array + 1) مساوی ہیں۔ ہیش افعال کچھ ایسے افعال ہیں جو پورے ہیش پر کام کرتے ہیں۔ کلیدی فنکشن ایک ہیش لیتا ہے اور اپنی کلیدوں کی فہرست واپس کرتا ہے۔ اسی طرح، ویلیوز فنکشن ہیش کی ویلیوز واپس کرتا ہے۔ نوٹ کریں کہ چابیاں اور اقدار ایک مستقل لیکن من مانی ترتیب میں واپس کی جاتی ہیں۔ #ہر کال اگلی کلید/ویلیو جوڑی واپس کرتی ہے۔ #تمام اقدار بالآخر واپس کر دی جائیں گی، لیکن ان کے آرڈر #کی پیش گوئی نہیں کی جا سکتی۔ جبکہ (($نام، $پتہ) = ہر% ایڈریس بک) {پرنٹ کریں "$نام $ایڈریس پر رہتا ہے" ؛} #مذکورہ بالا کی طرح، لیکن حروف تہجی کے لحاظ سے ترتیب دیا گیا ہے کہ میرا $نیکسٹ _ نام پیش کریں (کلیدیں% ایڈریس بک ترتیب دیں) {پرنٹ کریں "$نیکسٹ _ نام $ایڈریس بک پر رہتا ہے {$نیکسٹ _ نام \n" ؛} کنٹرول ڈھانچے پرل میں کئی قسم کے کنٹرول ڈھانچے ہوتے ہیں۔ اس میں بلاک پر مبنی کنٹرول ڈھانچے ہیں، جو سی، جاوا اسکرپٹ، اور جاوا پروگرامنگ زبانوں کی طرح ہیں۔ حالات قوسین سے گھیرے ہوتے ہیں، اور کنٹرول شدہ بلاکس قوسین سے گھیرے ہوتے ہیں: لیبل جبکہ (کنڈ) {.} لیبل جبکہ (کنڈ) {.} جاری رکھیں {.} لیبل کے لیے (init-expr ؛ کنڈ-expr ؛ Incr-expr) {.} لیبل فورچ ور (فہرست) {.} لیبل فورچ ور (فہرست) {.} جاری رکھیں {.} اگر (کنڈ) {.} اگر (کنڈ) {.} بصورت دیگر {.} اگر (کنڈ) {.} ایلسیف (کنڈ) {.} بصورت دیگر {.} جہاں صرف ایک بیان کو کنٹرول کیا جا رہا ہے، بیان میں ترمیم کرنے والے زیادہ ٹھوس نحو فراہم کرتے ہیں: بیان اگر کنڈ ؛ بیان جب تک کنڈ ؛ بیان جب تک کنڈ ؛ بیان ؛ بیان جب تک کہ کنڈ ؛ بیان فلو کنٹرول کلیدی الفاظ اگلا (سی کے تسلسل کے مطابق)، آخری (سی کے وقفے کے مطابق)، واپسی، اور دوبارہ اظہار ہیں، لہذا انہیں شارٹ سرکٹ آپریٹرز کے ساتھ استعمال کیا جا سکتا ہے۔ پرل میں دو مضمر لوپنگ تعمیرات بھی ہوتی ہیں، جن میں سے ہر ایک کی دو شکلیں ہوتی ہیں: نتائج = گریپ {.} فہرست کے نتائج = گریپ ایکسپرا، فہرست کے نتائج = نقشہ {.} فہرست کے نتائج = نقشہ ایکسپرا، فہرست گریپ فہرست کے ان تمام عناصر کو واپس کرتا ہے جن کے لیے کنٹرولڈ بلاک یا اظہار درست ہوتا ہے۔ نقشہ فہرست کے ہر عنصر کے لیے کنٹرول شدہ بلاک یا اظہار کا جائزہ لیتا ہے اور نتیجے میں آنے والی اقدار کی فہرست واپس کرتا ہے۔ یہ تعمیرات ایک سادہ فنکشنل پروگرامنگ سٹائل کو فعال کرتی ہیں۔ 5.10.0 ریلیز ہونے تک، پرل 5 میں کوئی سوئچ سٹیٹمنٹ نہیں تھا۔ 5.10.0 کے بعد سے، ایک ملٹی وے برانچ سٹیٹمنٹ جسے دیا گیا/کب دستیاب ہے کہا جاتا ہے، جو مندرجہ ذیل شکل اختیار کرتا ہے: استعمال کریں v5.10 ؛ #نئے 5.10 فنکشنز کو درآمد کرنے کے لیے موجود ہونا چاہیے (ایکسپرا) {جب (کنڈ) {.} ڈیفالٹ {.}} نحو طور پر، یہ ڈھانچہ دوسری زبانوں میں پائے جانے والے بیانات کو تبدیل کرنے کے لیے اسی طرح برتاؤ کرتا ہے، لیکن چند اہم اختلافات کے ساتھ۔ سب سے بڑا یہ ہے کہ واضح طور پر بیان کردہ بریک کمانڈز کا انتظار کرنے کے بجائے، دی گئی/جب بیانات پہلی کامیاب برانچ کے بعد عمل کو توڑ دیتے ہیں۔ اس کے برعکس، واضح تسلسل اس کے بجائے تبدیلی کے رویے کی تقلید کے لیے ضروری ہیں۔ ان لوگوں کے لیے جو پرل 5.10 استعمال نہیں کر رہے ہیں، پرل دستاویزات دیگر کنٹرول ڈھانچوں کا استعمال کرکے اسی اثر کو حاصل کرنے کے نصف درجن طریقوں کو بیان کرتی ہیں۔ ایک سوئچ ماڈیول بھی ہے، جو بہن زبان راکو کی طرز پر فعالیت فراہم کرتا ہے۔ اسے سورس فلٹر کا استعمال کرتے ہوئے لاگو کیا جاتا ہے، اس لیے اس کے استعمال کی غیر سرکاری طور پر حوصلہ شکنی کی جاتی ہے۔ پرل میں گوٹو لیبل کا بیان شامل ہے، لیکن یہ شاذ و نادر ہی استعمال ہوتا ہے۔ ایسے حالات جہاں دوسری زبانوں میں گوٹو طلب کیا جاتا ہے وہ پرل میں اکثر نہیں ہوتے ہیں، کیونکہ اس کے بہاؤ پر قابو پانے کے اختیارات کی وسعت ہے۔ ایک گوٹو اینڈ سب سٹیٹمنٹ بھی ہے جو ٹیل کال انجام دیتا ہے۔ یہ موجودہ سبروٹین کو ختم کرتا ہے اور فوری طور پر مخصوص سب کو کال کرتا ہے۔ یہ ان حالات میں استعمال ہوتا ہے جہاں کال کرنے والا خود پرل سے زیادہ موثر اسٹیک مینجمنٹ انجام دے سکتا ہے (عام طور پر اس لیے کہ موجودہ اسٹیک میں کوئی تبدیلی کی ضرورت نہیں ہے)، اور گہری تکرار میں، ٹیل کالنگ کارکردگی پر کافی مثبت اثر ڈال سکتی ہے، کیونکہ یہ واپسی پر دائرہ کار/اسٹیک مینجمنٹ کے اوور ہیڈ سے بچتا ہے۔ سبروٹینز سبروٹینز کو ذیلی مطلوبہ الفاظ کے ساتھ بیان کیا جاتا ہے اور صرف ان کا نام رکھ کر ان کی درخواست کی جاتی ہے۔ اگر زیر بحث ذیلی روٹین کا ابھی اعلان نہیں کیا گیا ہے، تو دعوت نامے کے لیے یا تو فنکشن کے نام کے بعد قوسین یا اس سے پہلے ایمپرسینڈ (&) کی ضرورت ہوتی ہے۔ لیکن قوسین کا استعمال اور بغیر قوسین کا استعمال بھی موجودہ ذیلی روٹین کے دلائل کو کال شدہ پر منتقل کرے گا، اور قوسین کے ساتھ استعمال کرنا پروٹوٹائپ کو بائی پاس کرے گا۔ #سبروٹین کو کال کرنا #پیرانتھیسز یہاں ضروری ہیں اگر سبروٹین کو بعد میں کوڈ فو () میں بیان کیا گیا ہے ؛ & فو ؛ #(یہ بھی کام کرتا ہے، لیکن سبروٹین کو منتقل کیے گئے دلائل کے حوالے سے اس کے دیگر نتائج ہیں) #سبروٹین سب فو {.} فو کی وضاحت کرنا ؛ #یہاں قوسین کی ضرورت نہیں ہے۔ سبروٹین نام کے بعد دلائل کی ایک فہرست فراہم کی جا سکتی ہے۔ دلائل اسکیلر، فہرستیں یا ہیش ہو سکتے ہیں۔ فو $x، @y،% z ؛ سبروٹین کے پیرامیٹرز کو نمبر یا ٹائپ کے طور پر ظاہر کرنے کی ضرورت نہیں ہے ؛ درحقیقت، وہ کال سے کال میں مختلف ہو سکتے ہیں۔ پیرامیٹرز کی کسی بھی توثیق کو سبروٹین کے اندر واضح طور پر انجام دیا جانا چاہیے۔ صفوں کو ان کے عناصر تک بڑھایا جاتا ہے ؛ ہیش کو کلیدی/قدر کے جوڑوں کی فہرست تک بڑھایا جاتا ہے ؛ اور پوری چیز کو اسکیلرز کی ایک فلیٹ فہرست کے طور پر سبروٹین میں منتقل کیا جاتا ہے۔ جو بھی دلائل پاس کیے جاتے ہیں وہ خصوصی صف @_ میں سبروٹین کے لیے دستیاب ہوتے ہیں۔ @_ کے عناصر اصل دلائل کے حوالے ہیں ؛ @_ کے عنصر کو تبدیل کرنے سے متعلقہ دلیل بدل جاتی ہے۔ @_ کے عناصر تک معمول کے مطابق سبسکرپٹ کرکے رسائی حاصل کی جا سکتی ہے۔ $_ [0]، $_ [1] تاہم، نتیجے میں آنے والے کوڈ کو پڑھنا مشکل ہو سکتا ہے، اور پیرامیٹرز میں پاس بائی ریفرنس سیمنٹکس ہوتے ہیں، جو ناپسندیدہ ہو سکتے ہیں۔ ایک عام فقرہ نامزد متغیرات کی فہرست میں @_ تفویض کرنا ہے۔ میرا ($x، $y، $z) = @_ ؛ یہ یادداشت کے پیرامیٹر کے نام فراہم کرتا ہے اور پاس بہ ویلیو سیمنٹکس کو لاگو کرتا ہے۔ میرا کلیدی لفظ اس بات کی نشاندہی کرتا ہے کہ درج ذیل متغیرات متناسب طور پر موجود بلاک تک محدود ہیں۔ ایک اور فقرہ @_ سے پیرامیٹرز کو ہٹانا ہے۔ یہ خاص طور پر اس وقت عام ہوتا ہے جب سبروٹین صرف ایک دلیل لیتا ہے یا آبجیکٹ پر مبنی ماڈیولز میں $سیلف دلیل کو سنبھالنے کے لیے۔ میرا $x = شفٹ ؛ سبروٹائنز نامزد دلائل کی تقلید کے لیے ہیش کو @_ تفویض کر سکتے ہیں۔ یہ سبروٹائنز کے لیے پرل بیسٹ پریکٹس میں تجویز کیا جاتا ہے جن میں کبھی بھی تین سے زیادہ پیرامیٹرز ہونے کا امکان ہوتا ہے۔ سب فنکشن 1 {میرا ٪ آرگس = @_ ؛ پرنٹ کریں "'x' دلیل تھی '$args {x}' \n '؛} فنکشن 1 (x => 23) ؛ سبروٹینز ویلیوز واپس کر سکتے ہیں۔ 42، $x، @y،% z واپس کریں ؛ اگر سبروٹین ریٹرن سٹیٹمنٹ کے ذریعے باہر نہیں نکلتا ہے، تو یہ سبروٹین باڈی کے اندر تشخیص شدہ آخری اظہار واپس کرتا ہے۔ واپسی کی قیمت میں صفوں اور ہیش کو اسکیلرز کی فہرستوں تک بڑھایا جاتا ہے، بالکل اسی طرح جیسے وہ دلائل کے لیے ہوتے ہیں۔ واپس کیے گئے اظہار کا اندازہ سبروٹین کے کالنگ سیاق و سباق میں کیا جاتا ہے ؛ یہ غیر محتاط افراد کو حیران کر سکتا ہے۔ ذیلی فہرست {(4، 5، 6)} ذیلی صف {@x = (4، 5، 6) ؛ @x} $x = فہرست ؛ #واپسی 6-فہرست کا آخری عنصر $x = صف ؛ #واپسی 3-فہرست میں عناصر کی تعداد @x = فہرست ؛ #واپسی (4، 5، 6) @x = صف ؛ #واپسی (4، 5، 6) ایک ذیلی روٹین اپنی کالنگ کے سیاق و سباق کو وانٹری فنکشن کے ساتھ دریافت کر سکتا ہے۔ سب یا تو {واپسی چاہتے ہیں؟ (1، 2): 'سنتری' ؛} $x = یا تو ؛ #واپس کرتا ہے "سنتری" @x = یا تو ؛ #واپس کرتا ہے (1، 2) گمنام افعال باقاعدہ تاثرات پرل زبان میں باقاعدہ تاثرات (RE، یا ریجیکس) لکھنے کے لیے ایک خصوصی نحو شامل ہے، اور مترجم میں سٹرنگ کو باقاعدہ تاثرات سے ملانے کے لیے ایک انجن ہوتا ہے۔ باقاعدہ ایکسپریشن انجن بیک ٹریکنگ الگورتھم کا استعمال کرتا ہے، جو اپنی صلاحیتوں کو سادہ پیٹرن میچنگ سے لے کر سٹرنگ کیپچر اور متبادل تک بڑھاتا ہے۔ باقاعدہ اظہار انجن ہنری اسپینسر کے لکھے ہوئے ریجیکس سے ماخوذ ہے۔ پرل باقاعدہ اظہار کی نحو اصل میں یونکس ورژن 8 باقاعدہ تاثرات سے لی گئی تھی۔ تاہم، یہ پرل کی پہلی ریلیز سے پہلے ہی الگ ہو گیا اور اس کے بعد مزید خصوصیات شامل کرنے کے لیے بڑھ گیا ہے۔ بہت سی دوسری زبانیں اور ایپلی کیشنز اب پوزیکس کے باقاعدہ تاثرات، جیسے پی ایچ پی، روبی، جاوا، مائیکروسافٹ کا. نیٹ فریم ورک، اور اپاچی ایچ ٹی ٹی پی سرور پر پرل مطابقت پذیر باقاعدہ تاثرات کو اپنا رہے ہیں۔ تاریخ کی وجہ سے باقاعدہ اظہار کی نحو انتہائی کمپیکٹ ہے۔ پہلی باقاعدہ اظہار کی بولیاں گلوبز کے مقابلے میں صرف قدرے زیادہ اظہار خیال تھیں، اور نحو کو اس طرح ڈیزائن کیا گیا تھا کہ ایک اظہار اس متن سے ملتا جلتا ہو جس سے وہ ملتا ہے۔ اس کا مطلب یہ تھا کہ چند تائید شدہ دعووں کو ظاہر کرنے کے لیے ایک سے زیادہ پنکٹیوشن کردار یا حد بندی کرنے والے حروف کا استعمال نہ کریں۔ وقت گزرنے کے ساتھ، باقاعدہ تاثرات کے اظہار میں زبردست اضافہ ہوا، لیکن نحو کے ڈیزائن پر کبھی نظر ثانی نہیں کی گئی اور وہ تعیین پر انحصار کرتا رہتا ہے۔ نتیجے کے طور پر، باقاعدہ تاثرات خفیہ اور انتہائی گھنے ہو سکتے ہیں۔ استعمال m// (میچ) آپریٹر باقاعدہ اظہار میچ متعارف کراتا ہے۔ (اگر اسے سلیش کے ذریعے محدود کیا جاتا ہے، جیسا کہ یہاں کی تمام مثالوں میں ہے، تو مختصر ہونے کے لیے لیڈنگ ایم کو خارج کیا جا سکتا ہے۔ اگر m موجود ہے، جیسا کہ مندرجہ ذیل تمام مثالوں میں، سلیش کی جگہ دیگر حد بندی کا استعمال کیا جا سکتا ہے۔) سب سے آسان صورت میں، ایک اظہار جیسے کہ $x = ~/abc/؛ درست ہونے کا اندازہ صرف اس صورت میں کرتا ہے جب سٹرنگ $x باقاعدہ اظہار abc سے میل کھاتا ہو۔ دوسری طرف s// (متبادل) آپریٹر، سرچ اینڈ ریپلیس آپریشن کی وضاحت کرتا ہے: $x = ~ s/abc/aBc/؛ #b کو اپ کیس کریں باقاعدہ تاثرات کا ایک اور استعمال اسپلٹ فنکشن کے لیے حد بندی کی وضاحت کرنا ہے: @words = split /، /، $لائن ؛ اسپلٹ فنکشن سٹرنگ کے ان حصوں کی ایک فہرست بناتا ہے جو باقاعدہ اظہار سے مطابقت رکھتے ہیں۔ اس مثال میں، ایک لائن کو اس کے اپنے کوما سے الگ کیے گئے حصوں کی فہرست میں تقسیم کیا جاتا ہے، اور اس کے بعد یہ فہرست @words صف کو تفویض کی جاتی ہے۔ نحو تبدیل کرنے والے پرل کے باقاعدہ تاثرات تبدیل کرنے والے لے سکتے ہیں۔ یہ واحد حرفی لاحقہ ہیں جو اظہار کے معنی میں ترمیم کرتے ہیں: $x = ~/abc/i ؛ #کیس-غیر حساس نمونہ $x = ~ s/abc/aBc/g سے ملتا ہے ؛ #عالمی تلاش اور تبدیلی کیونکہ باقاعدہ تاثرات کا کمپیکٹ نحو انہیں گھنے اور خفیہ بنا سکتا ہے، پروگرامرز کو زیادہ واضح باقاعدہ تاثرات لکھنے میں مدد کے لیے/x ترمیم کنندہ کو پرل میں شامل کیا گیا تھا۔ یہ پروگرامرز کو وائٹ اسپیس اور تبصروں کو باقاعدہ تاثرات کے اندر رکھنے کی اجازت دیتا ہے: $x = ~/a #میچ 'a'۔ #کے بعد کوئی بھی حرف c #اور اس کے بعد 'c' حرف/x ؛ باقاعدہ اظہار کے کچھ حصوں کو قوسین میں بند کیا جا سکتا ہے ؛ مماثل تار کے متعلقہ حصوں کو پکڑا جاتا ہے۔ کیپچرڈ سٹرنگز کو ترتیب وار بلٹ ان متغیر $1، $2، $3،. کو تفویض کیا جاتا ہے، اور کیپچرڈ سٹرنگز کی ایک فہرست میچ کی قیمت کے طور پر واپس کردی جاتی ہے۔ $x = ~/a (۔ ) c/؛ #'a' اور 'c' کے درمیان کیریکٹر کیپچر کریں $1، $2، $3، کو کوڈ میں بعد میں استعمال کیا جا سکتا ہے۔ پرل کے باقاعدہ تاثرات بلٹ ان یا صارف سے متعین افعال کو/ای ترمیم کنندہ کا استعمال کرتے ہوئے پکڑے گئے میچ پر لاگو کرنے کی بھی اجازت دیتے ہیں: $x = "سنتری" ؛ $x = ~ s/(g)/uc ($1)/e ؛ #سنتری $x۔ = $1 ؛ #پچھلے بیان میں میچ کے مندرجات کے ساتھ $x کو شامل کریں: سنتری آبجیکٹ۔ پرل میں آبجیکٹ پر مبنی کوڈ لکھنے کے بہت سے طریقے ہیں۔ سب سے بنیادی "مبارک" حوالہ جات کا استعمال ہے۔ یہ کسی دیئے گئے پیکیج سے تعلق رکھنے والے کسی بھی قسم کے حوالہ کی شناخت کرکے کام کرتا ہے، اور پیکیج مبارک حوالہ کے طریقے فراہم کرتا ہے۔ مثال کے طور پر، ایک دو جہتی نقطہ کی تعریف اس طرح کی جا سکتی ہے: ذیلی نقطہ:: نیا {#یہاں، نقطہ-> نیا (4، 5) کے نتیجے میں $کلاس 'پوائنٹ' ہوگی۔ #یہ ذیلی درجہ بندی کی حمایت کرنے کے لیے متغیر ہے (پرلوپ مین پیج دیکھیں)۔ میرا ($کلاس، $x، $y) = @_ ؛ برکت [$x، $y]، $کلاس ؛ #امپلیسیٹ ریٹرن} ذیلی نقطہ:: فاصلہ {میرا ($سیلف، $سے) = @_ ؛ میرا ($dx، $dy) = ($سیلف [0]-$سے [0]، $سیلف [1]-$سے [1]) ؛ sqrt ($dx * $dx + $dy * $dy) ؛} اس کلاس کو مثالوں کی تعمیر کے لیے نئے () کو مدعو کرکے، اور ان مثالوں پر فاصلے کو مدعو کرکے استعمال کیا جا سکتا ہے۔ میرا $p1 = پوائنٹ-> نیا (3، 4) ؛ میرا $p2 = پوائنٹ-> نیا (0، 0) ؛ پرنٹ $p1-> فاصلہ ($p2) ؛ #پرنٹس 5 بہت سی جدید پرل ایپلی کیشنز موز آبجیکٹ سسٹم استعمال کرتی ہیں۔ موز کلاس:: ایم او پی کے اوپر بنایا گیا ہے، جو ایک میٹا آبجیکٹ پروٹوکول ہے، جو موز استعمال کرنے والی تمام کلاسوں کے لیے مکمل خود جائزہ فراہم کرتا ہے۔ اس طرح آپ کلاسوں سے ان کی صفات، والدین، بچوں، طریقوں وغیرہ کے بارے میں پوچھ سکتے ہیں۔ سادہ اے پی آئی کا استعمال کرتے ہوئے۔ موز کلاسز: ایک کلاس میں صفر یا اس سے زیادہ صفات ہوتی ہیں۔ کلاس میں صفر یا اس سے زیادہ طریقے ہوتے ہیں۔ کلاس میں صفر یا اس سے زیادہ سپر کلاسز (عرف پیرنٹ کلاسز) ہوتے ہیں۔ ایک کلاس اپنے سپر کلاس (ایس) سے وراثت میں ملتی ہے۔ ایک کلاس صفر یا اس سے زیادہ کردار ادا کرتی ہے، جو ذیلی درجہ بندی کے بغیر کلاسوں میں پہلے سے طے شدہ فعالیت کو شامل کرنے کی صلاحیت میں اضافہ کرتی ہے۔ کلاس میں ایک کنسٹرکٹر اور ایک ڈسٹروکٹر ہوتا ہے۔ کلاس میں ایک میٹا کلاس ہوتا ہے۔ کلاس میں صفر یا اس سے زیادہ طریقہ کار تبدیل کرنے والے ہوتے ہیں۔ یہ تبدیلیاں اس کے اپنے طریقوں، ان طریقوں پر لاگو ہوسکتی ہیں جو اس کے آباؤ اجداد سے وراثت میں ملے ہیں، یا ان طریقوں پر جو کرداروں کے ذریعہ فراہم کیے جاتے ہیں۔ موز رولز: ایک کردار وہ چیز ہے جو ایک کلاس کرتی ہے، کسی حد تک دوسرے آبجیکٹ پر مبنی پروگرامنگ زبانوں میں مکسین یا انٹرفیس کی طرح۔ مکسین اور انٹرفیس کے برعکس، کرداروں کو انفرادی آبجیکٹ مثالوں پر لاگو کیا جا سکتا ہے۔ کسی کردار میں صفر یا اس سے زیادہ صفات ہوتی ہیں۔ ایک کردار میں صفر یا اس سے زیادہ طریقے ہوتے ہیں۔ ایک رول میں صفر یا اس سے زیادہ طریقہ کار میں ترمیم کرنے والے ہوتے ہیں۔ کسی کردار میں صفر یا اس سے زیادہ مطلوبہ طریقے ہوتے ہیں۔ موز ایکس کا استعمال کرتے ہوئے لکھی گئی کلاس کی ایک مثال:: موز تک توسیع کا اعلان کریں: موز ایکس کا استعمال کریں:: اعلان کریں ؛ کلاس پوائنٹ 3 ڈی پوائنٹ کو بڑھاتا ہے {ہے 'z' => (isa => 'Num'، ہے => 'rw') ؛ واضح کے بعد {$self-> z (0) ؛} طریقہ سیٹ _ سے (Num $x, Num $y, Num $z) {$self-> x ($x); $self-> y ($y); $self-> z ($z);} یہ پوائنٹ 3D نامی کلاس ہے جو موز کی مثالوں میں بیان کردہ پوائنٹ نامی ایک اور کلاس کو بڑھاتا ہے۔ یہ اپنی بیس کلاس میں ایک نئی خاصیت z کا اضافہ کرتا ہے، سیٹ ٹو کے طریقہ کار کی نئی تعریف کرتا ہے اور طریقہ کار کو واضح کرتا ہے۔ حوالہ جات بیرونی لنکس Perl سبق تقریبا 2 گھنٹے 30 منٹ میں Perl سیکھیں PerlMonks ایک کمیونٹی جو Perl علم اور کوڈنگ تجاویز کو شیئر کرنے کے لیے پرعزم ہے۔ مثال کے طور پر پرل کوڈ پرل والے مضامین