Perl language structure
পার্ল প্রোগ্রামিং ভাষার কাঠামো ভাষার বাক্য গঠনমূলক নিয়ম এবং প্রোগ্রামগুলি সংগঠিত করার সাধারণ উপায় উভয়কেই অন্তর্ভুক্ত করে। পার্লের নকশা দর্শনটি সাধারণভাবে উদ্ধৃত নীতিবাক্যে প্রকাশ করা হয়েছে "এটি করার একাধিক উপায় রয়েছে"। একটি বহু-দৃষ্টান্ত, গতিশীলভাবে টাইপ করা ভাষা হিসাবে, পার্ল প্রোগ্রাম ডিজাইনে প্রচুর পরিমাণে নমনীয়তার অনুমতি দেয়। পার্ল মডুলারাইজেশনকেও উৎসাহিত করে; এটি তার ইউনিক্স শিকড়ের উপাদান-ভিত্তিক নকশা কাঠামোর জন্য দায়ী করা হয়েছে, এবং সিপিএএন সংরক্ষণাগারের আকারের জন্য দায়ী, যা 100,000 এরও বেশি মডিউলের একটি সম্প্রদায়-রক্ষণাবেক্ষণ সংগ্রহস্থল। পার্লের মৌলিক বাক্যবিন্যাসে, ন্যূনতম হ্যালো ওয়ার্ল্ড প্রোগ্রামটি নিম্নরূপ লেখা যেতে পারেঃ "হ্যালো, ওয়ার্ল্ড! \n" মুদ্রণ করুন এটি হ্যালো, ওয়ার্ল্ড স্ট্রিংটি মুদ্রণ করে! এবং একটি নতুন লাইন, প্রতীকীভাবে একটি এন অক্ষর দ্বারা প্রকাশ করা হয় যার ব্যাখ্যা পূর্ববর্তী এস্কেপ অক্ষর (একটি ব্যাকস্ল্যাশ) দ্বারা পরিবর্তিত হয়। সংস্করণ 5.10 থেকে, নতুন 'সে' বিল্টইন আরও সহজভাবে একই প্রভাব তৈরি করেঃ "হ্যালো, ওয়ার্ল্ড!" বলুন। একটি সম্পূর্ণ পার্ল প্রোগ্রামকে পার্লের কমান্ড-লাইন প্যারামিটার হিসাবেও নির্দিষ্ট করা যেতে পারে, তাই একই প্রোগ্রামটি কমান্ড লাইন থেকেও কার্যকর করা যেতে পারে (উদাহরণস্বরূপ ইউনিক্সের জন্য দেখানো হয়েছে): $perl-e 'প্রিন্ট' হ্যালো, ওয়ার্ল্ড! \n 'প্রোগ্রামের ক্যানোনিকাল ফর্মটি কিছুটা বেশি শব্দযুক্তঃ #!/usr/বিন/পার্ল প্রিন্ট' হ্যালো, ওয়ার্ল্ড! \n '; হ্যাশ মার্ক চরিত্রটি পার্ল-এ একটি মন্তব্য প্রবর্তন করে, যা কোডের লাইনের শেষ পর্যন্ত চলে এবং কম্পাইলার (উইন্ডোজ ব্যতীত) দ্বারা উপেক্ষা করা হয়। এখানে ব্যবহৃত মন্তব্যটি একটি বিশেষ ধরনেরঃ এটিকে শেবাং লাইন বলা হয়। এটি ইউনিক্স-সদৃশ অপারেটিং সিস্টেমগুলিকে পার্ল ইন্টারপ্রেটার খুঁজে বের করতে বলে, যার ফলে পার্লের স্পষ্টভাবে উল্লেখ না করে প্রোগ্রামটিকে আহ্বান করা সম্ভব হয়। (লক্ষ্য করুন যে, মাইক্রোসফ্ট উইন্ডোজ সিস্টেমে, পার্ল প্রোগ্রামগুলি সাধারণত পার্ল ইন্টারপ্রেটারের সাথে. pl এক্সটেনশনকে সংযুক্ত করে আহ্বান করা হয়। এই ধরনের পরিস্থিতি মোকাবেলা করার জন্য, পার্ল শেবাং লাইনটি সনাক্ত করে এবং সুইচগুলির জন্য এটি বিশ্লেষণ করে।) ক্যানোনিকাল আকারে দ্বিতীয় লাইনে একটি অর্ধ-কোলন রয়েছে, যা পার্লের বিবৃতিগুলি পৃথক করতে ব্যবহৃত হয়। একটি ব্লক বা ফাইলের শুধুমাত্র একটি বিবৃতি সহ, একটি বিভাজক অপ্রয়োজনীয়, তাই এটি প্রোগ্রামের ন্যূনতম ফর্ম থেকে বাদ দেওয়া যেতে পারে-বা আরও সাধারণভাবে যে কোনও ব্লক বা ফাইলের চূড়ান্ত বিবৃতি থেকে। ক্যানোনিকাল ফর্মটিতে এটি অন্তর্ভুক্ত রয়েছে, কারণ অপ্রয়োজনীয় হলেও প্রতিটি বিবৃতি শেষ করা সাধারণ, কারণ এটি সম্পাদনাকে সহজ করে তোলেঃ কোডটি অর্ধ-কোলন সামঞ্জস্য না করে কোনও ব্লক বা ফাইলের শেষে যোগ করা বা সরিয়ে নেওয়া যেতে পারে। পার্ল-এর সংস্করণ 5.10 একটি সে ফাংশন প্রবর্তন করে যা তার আউটপুটে একটি নতুন লাইনের অক্ষরকে অন্তর্নিহিতভাবে সংযুক্ত করে, ন্যূনতম "হ্যালো ওয়ার্ল্ড" প্রোগ্রামটিকে আরও ছোট করেঃ নতুন 5.10 ফাংশন আমদানি করতে 5.010 ব্যবহার করুন; #অবশ্যই উপস্থিত থাকতে হবে, লক্ষ্য করুন যে এটি 5.010 নয় 5.10 বলুন 'হ্যালো, ওয়ার্ল্ড!' ডেটা টাইপ পার্ল-এ বেশ কয়েকটি মৌলিক ডেটা টাইপ রয়েছে। সর্বাধিক ব্যবহৃত এবং আলোচিত হল স্কেলার, অ্যারে, হ্যাশ, ফাইলহ্যান্ডেল এবং সাবরুটিনঃ স্কেলার মান স্ট্রিং মান (আক্ষরিক) অবশ্যই উদ্ধৃতি দ্বারা আবদ্ধ হতে হবে। দ্বৈত উদ্ধৃতিতে একটি স্ট্রিং বন্ধ করার ফলে ভেরিয়েবলের মানগুলি যার নাম স্ট্রিংয়ে প্রদর্শিত হয় তা স্বয়ংক্রিয়ভাবে স্ট্রিংয়ের পরিবর্তনশীল নাম (বা ইন্টারপোলেট করা) প্রতিস্থাপন করতে পারে। একক উদ্ধৃতিতে একটি স্ট্রিং আবদ্ধ করা পরিবর্তনশীল ইন্টারপোলেশন প্রতিরোধ করে। উদাহরণস্বরূপ, যদি $নাম "জিম" হয়ঃ তবে মুদ্রণ ("আমার নাম হল $নাম") "আমার নাম জিম" মুদ্রণ করবে (দ্বৈত উদ্ধৃতির মধ্যে ইন্টারপোলেশন), কিন্তু মুদ্রণ ('আমার নাম হল $নাম') "আমার নাম হল $নাম" মুদ্রণ করবে (একক উদ্ধৃতির মধ্যে কোনও ইন্টারপোলেশন নেই)। একটি স্ট্রিং-এ একটি দ্বিগুণ উদ্ধৃতি চিহ্ন অন্তর্ভুক্ত করতে, একটি ব্যাকস্ল্যাশ দিয়ে তার আগে বা একক উদ্ধৃতিতে স্ট্রিংটি আবদ্ধ করুন। একটি একক উদ্ধৃতি চিহ্ন অন্তর্ভুক্ত করতে, এর আগে একটি ব্যাকস্ল্যাশ দিয়ে বা স্ট্রিংটি দ্বিগুণ উদ্ধৃতিতে আবদ্ধ করুন। স্ট্রিংগুলি q এবং qq উদ্ধৃতি-সদৃশ অপারেটরগুলির সাথেও উদ্ধৃত করা যেতে পারেঃ 'এই' এবং q (এই) অভিন্ন, '$এই' এবং qq ($এই) অভিন্ন। পরিশেষে, এখানে নথি ব্যবহার করে মাল্টিলাইন স্ট্রিং সংজ্ঞায়িত করা যেতে পারেঃ $মাল্টিলাইনড _ স্ট্রিং = <<ইওএফ; এটি আমার মাল্টিলাইনড স্ট্রিং নোট যে আমি এটিকে "ইওএফ" শব্দ দিয়ে শেষ করছি। ইওএফ সংখ্যার (সংখ্যাসূচক ধ্রুবক) উদ্ধৃতি প্রয়োজন হয় না। পার্ল সংখ্যাগুলিকে স্ট্রিং-এ রূপান্তরিত করবে এবং বিপরীতভাবে সেগুলি যে প্রসঙ্গে ব্যবহৃত হয় তার উপর নির্ভর করে। যখন স্ট্রিংকে সংখ্যায় রূপান্তরিত করা হয়, তখন স্ট্রিংয়ের পিছনের অ-সংখ্যাসূচক অংশগুলি ফেলে দেওয়া হয়। যদি কোনও স্ট্রিংয়ের কোনও প্রধান অংশ সংখ্যাসূচক না হয়, তবে স্ট্রিংটি 0 সংখ্যায় রূপান্তরিত হবে। নিম্নলিখিত উদাহরণে, $n এবং $m স্ট্রিংকে সংখ্যা হিসাবে বিবেচনা করা হয়। এই কোডটি '5' নম্বরটি প্রিন্ট করে। চলকগুলির মান একই থাকে। লক্ষ্য করুন যে পার্ল-এ, + সর্বদা সংখ্যাসূচক সংযোজন অপারেটর। স্ট্রিং কনক্যাটেনেশন অপারেটর হল পিরিয়ড। $n = '3 আপেল'; $m = '2 কমলা'; মুদ্রণ $n + $m; ভগ্নাংশ মানগুলিকে পূর্ণসংখ্যার মানগুলিতে বৃত্তাকার করার জন্য ফাংশনগুলি সরবরাহ করা হয়ঃ ভগ্নাংশ অংশটি বন্ধ করে, শূন্যের দিকে বৃত্তাকার; পোসিক্সঃঃ সিলিং এবং পজিক্সঃঃ মেঝে বৃত্তাকার সর্বদা উপরে এবং সর্বদা নিচে, যথাক্রমে। প্রিন্টএফ "% f" বা স্প্রিন্টএফ "% f"-এর নম্বর-টু-স্ট্রিং রূপান্তর এমনকি বৃত্তাকার, ব্যাঙ্কারদের বৃত্তাকার ব্যবহার করে। পার্লের একটি বুলিয়ান প্রসঙ্গও রয়েছে যা এটি শর্তাধীন বিবৃতি মূল্যায়নে ব্যবহার করে। নিম্নলিখিত মানগুলি পার্ল-এ মিথ্যা হিসাবে মূল্যায়ন করা হয়ঃ $ফলস = 0; #সংখ্যা শূন্য $ফলস = 0.0; #ফ্লোট হিসাবে শূন্য সংখ্যা $ফলস = 0b0; #বাইনারি $-তে শূন্য সংখ্যা ফলস = 0x0; #হেক্সাডেসিমেল-এ শূন্য সংখ্যা ফলস = '0'; #স্ট্রিং শূন্য $ফলস = "; #খালি স্ট্রিং ফলস = (); #খালি তালিকা ফলস = আনডেফ; #আনডেফ $ফলস = 2-3+1 থেকে রিটার্ন মান 0-এ গণনা করা হয় যা" 0 "-এ রূপান্তরিত হয় তাই এটি মিথ্যা। এর মধ্যে "0 কিন্তু সত্য"-এর বিজোড় স্ব-বর্ণনাকারী আক্ষরিক স্ট্রিং অন্তর্ভুক্ত রয়েছে, যা আসলে একটি সংখ্যা হিসাবে 0, তবে বুলিয়ান হিসাবে ব্যবহার করা হলে সত্য। সমস্ত অ-সংখ্যাসূচক স্ট্রিংয়েরও এই বৈশিষ্ট্য রয়েছে, তবে এই নির্দিষ্ট স্ট্রিংটি কোনও সংখ্যাসূচক সতর্কতা ছাড়াই পার্ল দ্বারা কাটা হয়। এই স্ট্রিংয়ের একটি কম স্পষ্ট কিন্তু ধারণাগতভাবে বহনযোগ্য সংস্করণ হল '0ই0' বা '0ই0', যা 0 হিসাবে মূল্যায়ন করা অক্ষরের উপর নির্ভর করে না, কারণ '0ই0' আক্ষরিক অর্থে শূন্য গুণ দশ গুণ শূন্য। খালি হ্যাশ {} ও সত্য; এই প্রসঙ্গে {} একটি খালি ব্লক নয়, কারণ পার্ল-ই 'প্রিন্ট রেফ {}' হ্যাশ প্রদান করে। মূল্যায়িত বুলিয়ান অভিব্যক্তিগুলিও স্কেলার মান। ডকুমেন্টেশনটি প্রতিশ্রুতি দেয় না যে সত্য বা মিথ্যার কোন নির্দিষ্ট মান ফেরত দেওয়া হবে। অনেক বুলিয়ান অপারেটর সত্যের জন্য 1 এবং মিথ্যার জন্য খালি স্ট্রিং ফেরত দেয়। সংজ্ঞায়িত () ফাংশন নির্ধারণ করে যে একটি পরিবর্তনশীলের কোনও মান সেট আছে কিনা। উপরের উদাহরণগুলিতে, undef ব্যতীত প্রতিটি মানের জন্য সংজ্ঞায়িত ($false) সত্য। যদি 1 বা 0-এর বিশেষ প্রয়োজন হয়, তবে শর্তসাপেক্ষ অপারেটর ব্যবহার করে একটি স্পষ্ট রূপান্তর করা যেতে পারেঃ আমার $বাস্তব _ ফলাফল = $বুলিয়ান _ ফলাফল? 1: 0; অ্যারে মান একটি অ্যারে মান (বা তালিকা) তার উপাদানগুলি তালিকাভুক্ত করে নির্দিষ্ট করা হয়, কমা দ্বারা পৃথক করা হয়, বন্ধনী দ্বারা আবদ্ধ (অন্তত যেখানে অপারেটর অগ্রাধিকার দ্বারা প্রয়োজন হয়)। @scores = (32,45,16,5); qw () উদ্ধৃতি-সদৃশ অপারেটর উদ্ধৃতি এবং কমা টাইপ না করে স্ট্রিংয়ের একটি তালিকার সংজ্ঞা দেয়। বন্ধনীর পরিবর্তে প্রায় যে কোনও সীমানা নির্ধারণকারী ব্যবহার করা যেতে পারে। নিম্নলিখিত লাইনগুলি সমতুল্যঃ @names = ('বিলি', 'জো', 'জিম-বব'); @names = qw (বিলি জো জিম-বব); বিভক্ত ফাংশনটি স্ট্রিংয়ের একটি তালিকা প্রদান করে, যা একটি ডিলিমিটার স্ট্রিং বা নিয়মিত এক্সপ্রেশন ব্যবহার করে স্ট্রিং এক্সপ্রেশন থেকে বিভক্ত করা হয়। @scores = বিভক্ত (',', '32,45,16,5'); একটি তালিকার পৃথক উপাদানগুলি বর্গাকার বন্ধনীতে একটি সংখ্যাসূচক সূচক সরবরাহ করে অ্যাক্সেস করা হয়। স্কেলার সিগিল অবশ্যই ব্যবহার করতে হবে। উপতালিকাগুলি (অ্যারে স্লাইস) নির্দিষ্ট করা যেতে পারে, বন্ধনীতে সংখ্যাসূচক সূচকগুলির একটি পরিসীমা বা তালিকা ব্যবহার করে। এই ক্ষেত্রে অ্যারে সিগিল ব্যবহার করা হয়। উদাহরণস্বরূপ, $মাস [3] হল "এপ্রিল" (একটি অ্যারের প্রথম উপাদানটির সূচক মান 0), এবং @month [4.6] হল ("মে", "জুন", "জুলাই")। হ্যাশ মানগুলি পার্ল প্রোগ্রামাররা কী/মান জোড়ার তালিকা থেকে একটি হ্যাশ (বা সহযোগী অ্যারে) শুরু করতে পারে। যদি কীগুলি কমার পরিবর্তে => অপারেটর (কখনও কখনও ফ্যাট কমা বলা হয়) দিয়ে মানগুলি থেকে পৃথক করা হয়, তবে সেগুলি উদ্ধৃত (খালি শব্দ) হতে পারে। নিম্নলিখিত লাইনগুলি সমতুল্যঃ% প্রিয় = ('জো', 'লাল', 'স্যাম', 'নীল');% প্রিয় = (জো => 'লাল', স্যাম => 'নীল'); একটি হ্যাশের পৃথক মানগুলি কর্লি বন্ধনীতে সংশ্লিষ্ট কী প্রদান করে অ্যাক্সেস করা হয়। $সিগিল অ্যাক্সেস করা উপাদানটিকে স্কেলার হিসাবে চিহ্নিত করে। উদাহরণস্বরূপ, 'পছন্দের' {জো} সমান 'লাল'। একটি হ্যাশ পৃথকভাবে তার মান নির্ধারণ করে শুরু করা যেতে পারেঃ $পছন্দের {জো} = 'লাল'; $পছন্দের {স্যাম} = 'নীল'; $পছন্দের {অস্কার} = 'সবুজ'; পরিবর্তে @সিগিল ব্যবহার করে একাধিক উপাদান অ্যাক্সেস করা যেতে পারে (ফলাফলটিকে একটি তালিকা হিসাবে চিহ্নিত করা)। উদাহরণস্বরূপ, @favorite {'জো', 'স্যাম'} সমান ('লাল', 'নীল')। ফাইল হ্যান্ডলগুলি সম্পদগুলিতে পড়া এবং লেখার অ্যাক্সেস সরবরাহ করে। এগুলি প্রায়শই ডিস্কে থাকা ফাইল, তবে এটি একটি যন্ত্র, একটি পাইপ বা এমনকি একটি স্কেলার মানও হতে পারে। মূলত, ফাইল হ্যান্ডলগুলি শুধুমাত্র প্যাকেজ ভেরিয়েবল দিয়ে তৈরি করা যেতে পারে, অন্যান্য ভেরিয়েবল থেকে আলাদা করার জন্য ALL _ CAPS কনভেনশন ব্যবহার করে। পার্ল 5.6 এবং নতুন এছাড়াও একটি স্কেলার পরিবর্তনশীল গ্রহণ করে, যা একটি নামযুক্ত ফাইল হ্যান্ডেলের জায়গায় একটি বেনামী ফাইল হ্যান্ডেলের রেফারেন্সের জন্য সেট (স্বয়ংক্রিয়ভাবে) করা হবে। টাইপগ্লোব মান একটি টাইপগ্লোব মান হল একটি প্রতীক টেবিল এন্ট্রি। টাইপগ্লবগুলির প্রধান ব্যবহার হল প্রতীক টেবিলের উপনাম তৈরি করা। উদাহরণস্বরূপঃ * পিআই =\3.141592653; #ধ্রুবক স্কেলার তৈরি করছে $পিআই * এটি = * যে; #সমস্ত ডেটা প্রকারের জন্য উপনাম তৈরি করছে 'এটি' সমস্ত ডেটা প্রকারের জন্য 'যে' অ্যারে ফাংশন একটি অ্যারের উপাদানগুলির সংখ্যা স্কেলার প্রসঙ্গে অ্যারের মূল্যায়ন করে বা $#সিগিলের সাহায্যে নির্ধারণ করা যেতে পারে। পরেরটি অ্যারের শেষ উপাদানটির সূচক দেয়, উপাদানগুলির সংখ্যা নয়। স্কেলার (@array) এবং ($#array + 1) অভিব্যক্তিগুলি সমতুল্য। হ্যাশ ফাংশন এমন কয়েকটি ফাংশন রয়েছে যা পুরো হ্যাশে কাজ করে। কী ফাংশন একটি হ্যাশ নেয় এবং তার কীগুলির তালিকা প্রদান করে। একইভাবে, মান ফাংশন একটি হ্যাশের মান প্রদান করে। লক্ষ্য করুন যে কী এবং মানগুলি একটি সামঞ্জস্যপূর্ণ কিন্তু নির্বিচারে ক্রমে ফেরত দেওয়া হয়। #প্রতিটি কল পরবর্তী কী/মান জোড়া প্রদান করে। #সমস্ত মান অবশেষে ফেরত দেওয়া হবে, কিন্তু তাদের অর্ডার #পূর্বাভাস করা যাবে না। যখন (($নাম, $ঠিকানা) = প্রতিটি% অ্যাড্রেসবুক) {প্রিন্ট "$নাম $ঠিকানায় থাকে";} #উপরের মতই, কিন্তু বর্ণানুক্রমিকভাবে সাজানো আমার $পরবর্তী নাম (কীগুলি% অ্যাড্রেসবুক সাজান) {প্রিন্ট "$পরবর্তী নাম $অ্যাড্রেসবুকে থাকে {$পরবর্তী নাম} \n";} নিয়ন্ত্রণ কাঠামো পার্লের বিভিন্ন ধরনের নিয়ন্ত্রণ কাঠামো রয়েছে। এটিতে সি, জাভাস্ক্রিপ্ট এবং জাভা প্রোগ্রামিং ভাষার মতো ব্লক-ভিত্তিক নিয়ন্ত্রণ কাঠামো রয়েছে। শর্তগুলি বন্ধনী দ্বারা বেষ্টিত, এবং নিয়ন্ত্রিত ব্লকগুলি ধনুর্বন্ধনী দ্বারা বেষ্টিত থাকেঃ লেবেলের সময় (কনড) {.} লেবেল যখন (কনড) {.} লেবেলের জন্য (init-expr; কনড-এক্সপ্রে; ইনক্র-এক্সপ্রে) {.} লেবেল ফোর্যাচ ভার (তালিকা) {.} লেবেল ফোর্যাচ ভার (তালিকা) {.} অব্যাহত থাকে যদি (কনড) {.} যদি (কনড) {.} অন্যথায় {.} যদি (কনড) {.} এলসিফ (কনড) {.} অন্যথায়। প্রবাহ নিয়ন্ত্রণ কীওয়ার্ডগুলি পরবর্তী (সি 'র ধারাবাহিকতার সাথে সম্পর্কিত), শেষ (সি' র বিরতির সাথে সম্পর্কিত), রিটার্ন এবং রিডো হল অভিব্যক্তি, তাই এগুলি শর্ট-সার্কিট অপারেটরদের সাথে ব্যবহার করা যেতে পারে। পার্লের দুটি অন্তর্নিহিত লুপিং গঠন রয়েছে, যার প্রত্যেকটির দুটি রূপ রয়েছেঃ ফলাফল = গ্রেপ {.} তালিকা ফলাফল = গ্রেপ এক্সপ্রে, তালিকা ফলাফল = মানচিত্র {.} তালিকা ফলাফল = মানচিত্র এক্সপ্রে, তালিকা গ্রেপ তালিকার সমস্ত উপাদান প্রদান করে যার জন্য নিয়ন্ত্রিত ব্লক বা অভিব্যক্তিটি সত্য বলে মূল্যায়ন করে। মানচিত্রটি তালিকার প্রতিটি উপাদানের জন্য নিয়ন্ত্রিত ব্লক বা অভিব্যক্তি মূল্যায়ন করে এবং ফলাফলের মানগুলির একটি তালিকা প্রদান করে। এই গঠনগুলি একটি সহজ কার্যকরী প্রোগ্রামিং শৈলীকে সক্ষম করে। 5.10.0 প্রকাশের আগে পর্যন্ত পার্ল 5-এ কোনও সুইচ বিবৃতি ছিল না। 5.10.0 থেকে, প্রদত্ত/কখন পাওয়া যায় নামক একটি বহু-মুখী শাখা বিবৃতি, যা নিম্নলিখিত রূপ নেয়ঃ প্রদত্ত নতুন 5.10টি ফাংশন আমদানি করতে v5.10 ব্যবহার করুন; #অবশ্যই উপস্থিত থাকতে হবে (উদাহরণস্বরূপ) {যখন (কনড) {.} ডিফল্ট {.}} বাক্যগতভাবে, এই কাঠামোটি অন্যান্য ভাষায় পাওয়া বিবৃতিগুলি পরিবর্তন করার মতো একইভাবে আচরণ করে, তবে কয়েকটি গুরুত্বপূর্ণ পার্থক্য সহ। সবচেয়ে বড়টি হল সুইচ/কেস কাঠামোর বিপরীতে, দেওয়া/যখন বিবৃতিগুলি স্পষ্টভাবে সংজ্ঞায়িত ব্রেক কমান্ডের জন্য অপেক্ষা করার পরিবর্তে প্রথম সফল শাখার পরে কার্যকর করা হয়। বিপরীতভাবে, সুইচ আচরণ অনুকরণ করার জন্য সুস্পষ্ট ধারাবাহিকতা প্রয়োজন। যারা পার্ল 5.10 ব্যবহার করেন না, তাদের জন্য পার্ল ডকুমেন্টেশন অন্যান্য নিয়ন্ত্রণ কাঠামো ব্যবহার করে একই প্রভাব অর্জনের অর্ধ-ডজন উপায় বর্ণনা করে। এছাড়াও একটি সুইচ মডিউল রয়েছে, যা রাকু ভাষার উপর ভিত্তি করে কার্যকারিতা প্রদান করে। এটি একটি উৎস ফিল্টার ব্যবহার করে প্রয়োগ করা হয়, তাই এর ব্যবহার অনানুষ্ঠানিকভাবে নিরুৎসাহিত করা হয়। পার্ল একটি গোটো লেবেল বিবৃতি অন্তর্ভুক্ত করে, তবে এটি খুব কমই ব্যবহৃত হয়। অন্যান্য ভাষায় একটি গোটো আহ্বান করা হয় এমন পরিস্থিতি পার্ল-এ প্রায়শই ঘটে না, কারণ এর প্রবাহ নিয়ন্ত্রণ বিকল্পগুলির বিস্তৃতি রয়েছে। একটি গোটো এবং সাব স্টেটমেন্টও রয়েছে যা একটি টেল কল সম্পাদন করে। এটি বর্তমান সাব-রুটিনের সমাপ্তি ঘটায় এবং অবিলম্বে নির্দিষ্ট সাব-রুটিনে কল করে। এটি এমন পরিস্থিতিতে ব্যবহার করা হয় যেখানে একজন কলার পার্লের চেয়ে বেশি দক্ষ স্ট্যাক ম্যানেজমেন্ট করতে পারে (সাধারণত কারণ বর্তমান স্ট্যাকের কোনও পরিবর্তন প্রয়োজন হয় না), এবং গভীর পুনরাবৃত্তিতে, টেল কলিং পারফরম্যান্সের উপর যথেষ্ট ইতিবাচক প্রভাব ফেলতে পারে, কারণ এটি স্কোপ/স্ট্যাক ম্যানেজমেন্টের ওভারহেড এড়ায়। সাবরুটিনগুলি সাব কীওয়ার্ড দিয়ে সংজ্ঞায়িত করা হয় এবং কেবল তাদের নামকরণ করে আহ্বান করা হয়। যদি প্রশ্নযুক্ত সাবরুটিনটি এখনও ঘোষণা করা না হয়, তবে আহ্বানের জন্য ফাংশনের নামের পরে বন্ধনী বা তার আগে একটি অ্যাম্পারস্যান্ড (&) প্রয়োজন। কিন্তু বন্ধনী ছাড়া এবং ব্যবহার করা পরোক্ষভাবে বর্তমান সাবরুটিনের আর্গুমেন্টগুলিকে কল করা যুক্তিতে পাস করবে এবং বন্ধনী সহ এবং ব্যবহার করা প্রোটোটাইপগুলিকে বাইপাস করবে। #একটি সাবরুটিনে কল করা #এখানে প্যারেন্থেসিসের প্রয়োজন হয় যদি সাবরুটিনটি কোডের মধ্যে পরে সংজ্ঞায়িত করা হয় ফো (); & ফো; #(এটিও কাজ করে, তবে সাবরুটিনে পাস করা আর্গুমেন্ট সম্পর্কিত অন্যান্য পরিণতি রয়েছে) #একটি সাবরুটিনে সাব ফু {.} ফো সংজ্ঞায়িত করা; #এখানে বন্ধনীগুলির প্রয়োজন হয় না সাবরুটিনের নামের পরে আর্গুমেন্টের একটি তালিকা সরবরাহ করা যেতে পারে। যুক্তিগুলি স্কেলার, তালিকা বা হ্যাশ হতে পারে। ফো $এক্স, @y,% জেড; একটি সাবরুটিনের প্যারামিটারগুলি কোনও নম্বর বা প্রকার হিসাবে ঘোষণা করার প্রয়োজন নেই; আসলে, সেগুলি কল থেকে কল পর্যন্ত পরিবর্তিত হতে পারে। প্যারামিটারগুলির যে কোনও বৈধতা অবশ্যই সাবরুটিনের ভিতরে স্পষ্টভাবে সঞ্চালিত হতে হবে। অ্যারেগুলি তাদের উপাদানগুলিতে প্রসারিত হয়; হ্যাশগুলি কী/মান জোড়ার তালিকায় প্রসারিত হয়; এবং পুরো লটটি স্কেলারের একটি সমতল তালিকা হিসাবে সাবরুটিনে পাস করা হয়। যে আর্গুমেন্টগুলি পাস করা হয় তা বিশেষ অ্যারে @_-এ সাবরুটিনের জন্য উপলব্ধ। @_-এর উপাদানগুলি প্রকৃত আর্গুমেন্টের রেফারেন্স; @_-এর একটি উপাদান পরিবর্তন করলে সংশ্লিষ্ট আর্গুমেন্ট পরিবর্তন হয়। @_-এর উপাদানগুলি স্বাভাবিক উপায়ে সাবস্ক্রিপ্ট করে অ্যাক্সেস করা যেতে পারে। $_ [0], $_ [1] তবে, ফলস্বরূপ কোডটি পড়া কঠিন হতে পারে এবং পরামিতিগুলির পাস-বাই-রেফারেন্স শব্দার্থ রয়েছে, যা অবাঞ্ছিত হতে পারে। একটি সাধারণ প্রবাদ হল নামযুক্ত চলকের তালিকায় @_ বরাদ্দ করা। আমার ($x, $y, $z) = @_; এটি স্মরণীয় পরামিতি নাম প্রদান করে এবং পাস-বাই-ভ্যালু শব্দার্থবিদ্যা প্রয়োগ করে। আমার কীওয়ার্ডটি নির্দেশ করে যে নিম্নলিখিত ভেরিয়েবলগুলি লেক্সিকভাবে ধারণকারী ব্লকে স্কোপ করা হয়েছে। আরেকটি প্রবাদ হল @_-এর প্যারামিটারগুলি সরিয়ে ফেলা। এটি বিশেষত সাধারণ যখন সাবরুটিন শুধুমাত্র একটি যুক্তি নেয় বা অবজেক্ট-ওরিয়েন্টেড মডিউলে $সেলফ আর্গুমেন্ট পরিচালনা করার জন্য। আমার $x = স্থানান্তর; নামযুক্ত আর্গুমেন্টগুলি অনুকরণ করার জন্য সাবরুটিনগুলি একটি হ্যাশকে @_ বরাদ্দ করতে পারে; সাবরুটিনের জন্য পার্ল বেস্ট প্র্যাকটিসে এটি সুপারিশ করা হয় যা সম্ভবত তিনটির বেশি পরামিতি থাকতে পারে। সাব ফাংশন1 {আমার% আরগস = @_; প্রিন্ট 'এক্স' আর্গুমেন্ট ছিল '$আরগস {এক্স}' \এন ';} ফাংশন1 (এক্স => 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) বেনামী ফাংশন নিয়মিত অভিব্যক্তি পার্ল ভাষায় নিয়মিত অভিব্যক্তি (আরই, বা রেজেক্স) লেখার জন্য একটি বিশেষ বাক্যবিন্যাস রয়েছে এবং দোভাষীতে নিয়মিত অভিব্যক্তিগুলির সাথে স্ট্রিং মেলানোর জন্য একটি ইঞ্জিন রয়েছে। নিয়মিত-অভিব্যক্তি ইঞ্জিন একটি ব্যাকট্র্যাকিং অ্যালগরিদম ব্যবহার করে, যা তার ক্ষমতাকে সহজ প্যাটার্ন ম্যাচিং থেকে স্ট্রিং ক্যাপচার এবং প্রতিস্থাপন পর্যন্ত প্রসারিত করে। নিয়মিত-অভিব্যক্তি ইঞ্জিনটি হেনরি স্পেন্সারের লেখা রেজেক্স থেকে উদ্ভূত হয়েছে। পার্ল নিয়মিত-অভিব্যক্তি বাক্যবিন্যাস মূলত ইউনিক্স সংস্করণ 8 নিয়মিত অভিব্যক্তি থেকে নেওয়া হয়েছিল। যাইহোক, পার্ল-এর প্রথম প্রকাশের আগে এটি বিচ্ছিন্ন হয়ে যায় এবং তারপর থেকে আরও অনেক বৈশিষ্ট্য অন্তর্ভুক্ত করার জন্য বৃদ্ধি পেয়েছে। অন্যান্য অনেক ভাষা এবং অ্যাপ্লিকেশন এখন পি. এইচ. পি, রুবি, জাভা, মাইক্রোসফটের. নেট ফ্রেমওয়ার্ক এবং অ্যাপাচি এইচ. টি. টি. পি সার্ভারের মতো পজিক্স নিয়মিত এক্সপ্রেশনগুলির উপর পার্ল সামঞ্জস্যপূর্ণ নিয়মিত এক্সপ্রেশন গ্রহণ করছে। ইতিহাসের কারণে নিয়মিত-অভিব্যক্তি বাক্যবিন্যাস অত্যন্ত সংক্ষিপ্ত। প্রথম নিয়মিত-অভিব্যক্তি উপভাষাগুলি গ্লোবের তুলনায় সামান্য বেশি অভিব্যক্তিপূর্ণ ছিল এবং বাক্যবিন্যাসটি এমনভাবে তৈরি করা হয়েছিল যাতে একটি অভিব্যক্তি তার সাথে মেলে এমন পাঠ্যের অনুরূপ হয়। এর অর্থ কয়েকটি সমর্থিত দাবি প্রকাশ করার জন্য একক বিরামচিহ্ন অক্ষর বা একজোড়া সীমাবদ্ধ অক্ষরের বেশি ব্যবহার না করা। সময়ের সাথে সাথে, নিয়মিত অভিব্যক্তিগুলির অভিব্যক্তি ব্যাপকভাবে বৃদ্ধি পেয়েছিল, তবে বাক্য গঠন নকশাটি কখনই সংশোধন করা হয়নি এবং বিরামচিহ্নের উপর নির্ভর করে চলেছে। ফলস্বরূপ, নিয়মিত অভিব্যক্তিগুলি রহস্যময় এবং অত্যন্ত ঘন হতে পারে। ব্যবহার m// (ম্যাচ) অপারেটর একটি নিয়মিত-অভিব্যক্তি মিল প্রবর্তন করে। (যদি এটি স্ল্যাশ দ্বারা সীমাবদ্ধ করা হয়, যেমন এখানে সমস্ত উদাহরণে, সংক্ষিপ্ততার জন্য শীর্ষস্থানীয় এম বাদ দেওয়া যেতে পারে। যদি এম উপস্থিত থাকে, নিচের সমস্ত উদাহরণের মতো, স্ল্যাশের জায়গায় অন্যান্য সীমানা নির্ধারণকারী ব্যবহার করা যেতে পারে।) সহজতম ক্ষেত্রে, $x = ~/abc/; এর মতো একটি অভিব্যক্তি সত্য বলে মূল্যায়ন করা হয় যদি এবং শুধুমাত্র যদি স্ট্রিং $x নিয়মিত অভিব্যক্তি abc এর সাথে মেলে। অন্যদিকে, s// (বিকল্প) অপারেটর একটি অনুসন্ধান-এবং-প্রতিস্থাপন ক্রিয়াকলাপ নির্দিষ্ট করেঃ $x = ~ s/abc/aBc/; #b কে আপকেস করুন নিয়মিত অভিব্যক্তিগুলির আরেকটি ব্যবহার হল বিভক্ত ফাংশনের জন্য সীমানা নির্ধারণ করাঃ @words = বিভক্ত/,/, $লাইন; বিভক্ত ফাংশন স্ট্রিংয়ের অংশগুলির একটি তালিকা তৈরি করে যা নিয়মিত অভিব্যক্তিটির সাথে মেলে। এই উদাহরণে, একটি লাইন তার নিজস্ব কমা-বিচ্ছিন্ন অংশগুলির একটি তালিকায় বিভক্ত করা হয় এবং এই তালিকাটি তারপর @words অ্যারেতে বরাদ্দ করা হয়। সিনট্যাক্স মডিফায়ার পার্ল নিয়মিত এক্সপ্রেশনগুলি মডিফায়ার নিতে পারে। এগুলি একক-অক্ষরের প্রত্যয় যা অভিব্যক্তিটির অর্থ পরিবর্তন করেঃ $x = ~/abc/i; #কেস-অসংবেদনশীল প্যাটার্ন মেলে $x = ~ s/abc/g; #গ্লোবাল সার্চ এবং প্রতিস্থাপন কারণ নিয়মিত অভিব্যক্তিগুলির কম্প্যাক্ট সিনট্যাক্স এগুলিকে ঘন এবং রহস্যময় করে তুলতে পারে, প্রোগ্রামারদের আরও সুস্পষ্ট নিয়মিত অভিব্যক্তি লিখতে সহায়তা করার জন্য/x মোডিফায়ারটি পার্ল-এ যুক্ত করা হয়েছিল। এটি প্রোগ্রামারদের নিয়মিত অভিব্যক্তির মধ্যে হোয়াইটস্পেস এবং মন্তব্য রাখার অনুমতি দেয়ঃ $x = ~/a #ম্যাচ 'a'। #এর পরে যে কোনও অক্ষর সি #এর পরে 'সি' অক্ষর/এক্স; একটি নিয়মিত অভিব্যক্তির ক্যাপচারিং অংশগুলি বন্ধনীতে আবদ্ধ করা যেতে পারে; একটি মিলযুক্ত স্ট্রিংয়ের সংশ্লিষ্ট অংশগুলি ধরা হয়। ক্যাপচার করা স্ট্রিংগুলি ক্রমিক অন্তর্নির্মিত ভেরিয়েবল $1, $2, $3,.-এ বরাদ্দ করা হয় এবং ক্যাপচার করা স্ট্রিংয়ের একটি তালিকা ম্যাচের মান হিসাবে ফেরত দেওয়া হয়। $x = ~/a (। ) সি/; #'এ' এবং 'সি' ক্যাপচার স্ট্রিংয়ের মধ্যে অক্ষরটি ক্যাপচার করুন $1, $2, $3,. কোডে পরে ব্যবহার করা যেতে পারে। পার্লের নিয়মিত অভিব্যক্তিগুলি অন্তর্নির্মিত বা ব্যবহারকারী-সংজ্ঞায়িত ফাংশনগুলিকে/ই সংশোধনকারী ব্যবহার করে ক্যাপচার করা ম্যাচে প্রয়োগ করার অনুমতি দেয়ঃ $x = "কমলা"; $x = ~ s/(জিই)/ইউসি ($1)/ই; #কমলা জিইএস $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' => আছে (আইসা => 'Num', => 'rw'); পরিষ্কারের পরে {$self-> z (0);} পদ্ধতি সেট _ টু (Num $x, Num $y, Num $z) {$self-> x ($x); $self-> y ($y); $self-> z ($z);} এটি পয়েন্ট 3ডি নামে একটি ক্লাস যা মূস উদাহরণে ব্যাখ্যা করা পয়েন্ট নামে আরেকটি ক্লাস প্রসারিত করে। এটি তার বেস ক্লাসে একটি নতুন অ্যাট্রিবিউট z যোগ করে, পদ্ধতি সেট _ টু-কে নতুন করে সংজ্ঞায়িত করে এবং পদ্ধতিটিকে স্পষ্টভাবে প্রসারিত করে। রেফারেন্স বাহ্যিক লিঙ্ক পার্ল টিউটোরিয়াল প্রায় 2 ঘন্টা 30 মিনিটের মধ্যে পার্ল শিখুন পার্লমঙ্কস একটি সম্প্রদায় পার্ল জ্ঞান এবং কোডিং টিপস ভাগ করে নেওয়ার জন্য প্রতিশ্রুতিবদ্ধ। পার্ল কোড পার্ল-এর উদাহরণ সহ নিবন্ধ