GoGPT Best VPN GoSearch

অনওয়ার্কস ফেভিকন

perlmod - ক্লাউডে অনলাইন

উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটরের মাধ্যমে OnWorks বিনামূল্যে হোস্টিং প্রদানকারীতে perlmod চালান

এটি হল পারলমোড কমান্ড যা আমাদের একাধিক বিনামূল্যের অনলাইন ওয়ার্কস্টেশন যেমন উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটর ব্যবহার করে OnWorks ফ্রি হোস্টিং প্রদানকারীতে চালানো যেতে পারে।

কার্যক্রম:

NAME এর


perlmod - পার্ল মডিউল (প্যাকেজ এবং প্রতীক টেবিল)

বর্ণনাঃ


Is এই দ্য দলিল আপনি ছিল পরে?
আপনি যে তথ্য খুঁজছেন তা থাকতে পারে এমন অন্যান্য নথি রয়েছে:

এই ডক
পার্লের প্যাকেজ, নামস্থান এবং ক্লাসের কিছু তথ্য।

perlnewmod
একটি নতুন মডিউল তৈরির টিউটোরিয়াল।

পার্লমোডস্টাইল
একটি নতুন মডিউল তৈরির জন্য সর্বোত্তম অনুশীলন।

প্যাকেজ
পার্ল প্যাকেজগুলিকে স্টম্পিং থেকে রক্ষা করার জন্য বিকল্প নামস্থানের জন্য একটি ব্যবস্থা প্রদান করে
একে অপরের ভেরিয়েবল। প্রকৃতপক্ষে, বিশ্বব্যাপী ভেরিয়েবলের মতো সত্যিই কোনও জিনিস নেই
পার্ল প্যাকেজ বিবৃতি সংকলন ইউনিটকে প্রদত্ত হিসাবে ঘোষণা করে
নামস্থান প্যাকেজ ঘোষণার সুযোগ ঘোষণার মাধ্যমেই
এনক্লোজিং ব্লকের শেষ, "eval", বা ফাইল, যেটি প্রথমে আসে (যেমন একই সুযোগ
দ্য আমার() এবং স্থানীয়() অপারেটর)। অযোগ্য গতিশীল শনাক্তকারী এতে থাকবে
নামস্থান, সেই কয়েকটি শনাক্তকারী ব্যতীত যেগুলি অযোগ্য হলে, প্রধান থেকে ডিফল্ট
নীচে বর্ণিত হিসাবে বর্তমানের পরিবর্তে প্যাকেজ। একটি প্যাকেজ বিবৃতি শুধুমাত্র প্রভাবিত করে
ডায়নামিক ভেরিয়েবল -- আপনি ব্যবহার করেছেন সেগুলি সহ স্থানীয়() অন--কিন্তু না আভিধানিক ভেরিয়েবল
সঙ্গে তৈরি আমার(). সাধারণত এটি দ্বারা অন্তর্ভুক্ত একটি ফাইলের প্রথম ঘোষণা হবে
"করুন", "প্রয়োজন", বা "ব্যবহার করুন" অপারেটর। আপনি একাধিক প্যাকেজে স্যুইচ করতে পারেন
স্থান এটি শুধুমাত্র প্রভাবিত করে যে কোন প্রতীক টেবিলটি বাকি অংশের জন্য কম্পাইলার দ্বারা ব্যবহৃত হয়
যে ব্লক আপনি প্রিফিক্স করে অন্যান্য প্যাকেজে ভেরিয়েবল এবং ফাইলহ্যান্ডেলগুলি উল্লেখ করতে পারেন
প্যাকেজ নাম এবং একটি ডবল কোলন সহ শনাক্তকারী: $Package::Variable. প্যাকেজ হলে
নামটি শূন্য, "প্রধান" প্যাকেজটি ধরে নেওয়া হয়েছে। অর্থাৎ, $::পাল এর সমতুল্য
$main::পাল।

পুরানো প্যাকেজ ডিলিমিটার একটি একক উদ্ধৃতি ছিল, কিন্তু ডাবল কোলন এখন পছন্দের
ডিলিমিটার, আংশিকভাবে কারণ এটি মানুষের কাছে আরও পাঠযোগ্য, এবং আংশিকভাবে কারণ এটি আরও বেশি
পঠনযোগ্য Emacs ম্যাক্রো এটি C++ প্রোগ্রামারদের মনে করে যে তারা জানে কি ঘটছে
on--একক উদ্ধৃতিটিকে বিভাজক হিসাবে ব্যবহার করার বিপরীতে, যা অ্যাডা তৈরি করার জন্য ছিল
প্রোগ্রামাররা মনে করেন তারা জানত কি ঘটছে। কারণ সেকেলে সিনট্যাক্স
এখনও পিছনের সামঞ্জস্যের জন্য সমর্থিত, যদি আপনি "এটি" এর মতো একটি স্ট্রিং ব্যবহার করার চেষ্টা করেন
$owner's house", আপনি $owner::s অ্যাক্সেস করবেন; অর্থাৎ, প্যাকেজে $s পরিবর্তনশীল
"মালিক", যা সম্ভবত আপনি যা বোঝাতে চেয়েছিলেন তা নয়। দ্ব্যর্থতা নিরসনে ধনুর্বন্ধনী ব্যবহার করুন, যেমন "এটি আছে
${মালিকের বাড়ি"।

প্যাকেজগুলিতে প্যাকেজ বিভাজক থাকতে পারে, যেমন $OUTER::INNER::var। এই
যদিও নামের সন্ধানের ক্রম সম্পর্কে কিছুই বোঝায় না। কোন আপেক্ষিক প্যাকেজ নেই:
সমস্ত চিহ্ন বর্তমান প্যাকেজের স্থানীয়, অথবা সম্পূর্ণরূপে যোগ্য হতে হবে
বাইরের প্যাকেজের নাম নিচে। উদাহরণস্বরূপ, প্যাকেজ "OUTER" এর মধ্যে কোথাও নেই যেটি
$INNER::var বলতে $OUTER::INNER::var বোঝায়। "অভ্যন্তরীণ" একটি সম্পূর্ণ আলাদা বিশ্বকে বোঝায়
প্যাকেজ।

শুধুমাত্র অক্ষর (বা আন্ডারস্কোর) দিয়ে শুরু হওয়া শনাক্তকারীগুলি একটি প্যাকেজের প্রতীকে সংরক্ষণ করা হয়
টেবিল অন্যান্য সমস্ত চিহ্ন প্যাকেজ "প্রধান" এ রাখা হয়, সমস্ত বিরাম চিহ্ন সহ,
যেমন $_ উপরন্তু, অযোগ্য হলে, শনাক্তকারী STDIN, STDOUT, STDERR, ARGV,
ARGVOUT, ENV, INC, এবং SIG প্যাকেজ "প্রধান"-এ থাকতে বাধ্য করা হয়, এমনকি অন্যের জন্য ব্যবহার করা হলেও
তাদের অন্তর্নির্মিত বেশী উদ্দেশ্য. আপনার যদি "m", "s", বা "y" নামে একটি প্যাকেজ থাকে
আপনি একটি শনাক্তকারীর যোগ্য ফর্ম ব্যবহার করতে পারবেন না কারণ এটি পরিবর্তে ব্যাখ্যা করা হবে
একটি প্যাটার্ন ম্যাচ, একটি প্রতিস্থাপন, বা একটি প্রতিবর্ণীকরণ হিসাবে।

আন্ডারস্কোর দিয়ে শুরু হওয়া ভেরিয়েবলগুলিকে প্যাকেজ প্রধানে বাধ্য করা হত, কিন্তু আমরা এটি সিদ্ধান্ত নিয়েছি
প্যাকেজ লেখকদের নির্দেশ করার জন্য লিডিং আন্ডারস্কোর ব্যবহার করতে সক্ষম হওয়ার জন্য এটি আরও কার্যকর ছিল
ব্যক্তিগত ভেরিয়েবল এবং পদ্ধতির নাম। যাইহোক, ভেরিয়েবল এবং ফাংশন একটি একক নাম দিয়ে
"_", যেমন $_ এবং "সাব _", এখনও প্যাকেজ "প্রধান"-এ বাধ্য করা হয়। এছাড়াও দেখুন "The
পার্লভারে পরিবর্তনশীল নামের সিনট্যাক্স"।

"eval" ed স্ট্রিংগুলি প্যাকেজে সংকলিত হয় যেখানে eval() সংকলিত হয়েছিল।
($SIG{} এ অ্যাসাইনমেন্ট, যাইহোক, ধরে নিন যে সিগন্যাল হ্যান্ডলারটি "প্রধান"-এ রয়েছে
প্যাকেজ আপনি যদি একটি সিগন্যাল হ্যান্ডলার রাখতে চান তবে সিগন্যাল হ্যান্ডলারের নামটি যোগ্যতা অর্জন করুন
প্যাকেজ।) উদাহরণ স্বরূপ, পরীক্ষা করুন perldb.pl পার্ল লাইব্রেরিতে। এটি প্রাথমিকভাবে সুইচ করে
"DB" প্যাকেজে যাতে ডিবাগার প্রোগ্রামের ভেরিয়েবলের সাথে হস্তক্ষেপ না করে
আপনি ডিবাগ করার চেষ্টা করছেন। বিভিন্ন পয়েন্টে, তবে, এটি সাময়িকভাবে তে ফিরে যায়
"প্রধান" প্যাকেজ "প্রধান" প্যাকেজের প্রসঙ্গে বিভিন্ন অভিব্যক্তি মূল্যায়ন করতে (বা
আপনি যেখান থেকে এসেছেন)। perldebug দেখুন।

বিশেষ চিহ্ন "__PACKAGE__" বর্তমান প্যাকেজ ধারণ করে, কিন্তু (সহজে) ব্যবহার করা যাবে না
পরিবর্তনশীল নাম নির্মাণ করতে।

সম্পর্কিত অন্যান্য স্কোপিং সমস্যার জন্য perlsub দেখুন আমার() এবং স্থানীয়(), এবং perlref সংক্রান্ত
বন্ধ

প্রতীক টেবিল
একটি প্যাকেজের প্রতীক সারণী দুটির সাথে সেই নামের হ্যাশে সংরক্ষণ করা হয়
কোলন সংযুক্ত। প্রধান প্রতীক টেবিলের নাম এইভাবে %main::, বা %:: সংক্ষেপে।
একইভাবে পূর্বে উল্লিখিত নেস্টেড প্যাকেজের প্রতীক টেবিলের নামকরণ করা হয়েছে
%বাইরের ভেতরের::.

হ্যাশের প্রতিটি এন্ট্রির মান হল আপনি যখন *নাম ব্যবহার করেন তখন আপনি যা উল্লেখ করছেন
টাইপগ্লোব স্বরলিপি।

স্থানীয় *প্রধান::foo = *প্রধান::বার;

আপনি একটি প্যাকেজের সমস্ত ভেরিয়েবল প্রিন্ট করতে এটি ব্যবহার করতে পারেন, উদাহরণস্বরূপ। মান
কিন্তু পুরাতন dumpvar.pl লাইব্রেরি এবং CPAN মডিউল Devel::Symdump এটি ব্যবহার করে।

নতুন প্রতীক টেবিল এন্ট্রি তৈরির ফলাফল সরাসরি বা কোনো এন্ট্রি পরিবর্তন করে যে
টাইপগ্লোবগুলি ইতিমধ্যেই অনির্ধারিত নয় এবং পার্লের রিলিজের মধ্যে পরিবর্তন সাপেক্ষে।

একটি টাইপগ্লোবের অ্যাসাইনমেন্ট একটি অ্যালিয়াসিং অপারেশন সঞ্চালন করে, যেমন,

*ডিক = *রিচার্ড;

ভেরিয়েবল, সাবরুটিন, ফরম্যাট এবং ফাইল এবং ডিরেক্টরি হ্যান্ডেলগুলি এর মাধ্যমে অ্যাক্সেসযোগ্য
শনাক্তকারী "রিচার্ড" সনাক্তকারী "ডিক" এর মাধ্যমেও অ্যাক্সেসযোগ্য। যদি তুমি চাও
alias শুধুমাত্র একটি নির্দিষ্ট পরিবর্তনশীল বা সাবরুটিন, পরিবর্তে একটি রেফারেন্স বরাদ্দ করুন:

*ডিক = \$রিচার্ড;

যা $richard এবং $dick-কে একই পরিবর্তনশীল করে, কিন্তু @richard এবং @dick-কে ছেড়ে দেয়
পৃথক অ্যারে। চতুর, তাই না?

নিম্নলিখিত বিবৃতিগুলির মধ্যে একটি সূক্ষ্ম পার্থক্য রয়েছে:

*foo = *বার;
*foo = \$bar;

"*foo = *বার" টাইপগ্লোবগুলিকে সমার্থক করে তোলে যখন "*foo = \$bar"
দুটি স্বতন্ত্র টাইপগ্লোবের স্কেলার অংশ একই স্কেলার মানকে নির্দেশ করে। এই যে মানে
নিম্নলিখিত কোড:

$বার = 1;
*foo = \$bar; # $foo কে $বারের জন্য একটি উপনাম করুন

{
স্থানীয় $বার = 2; # পরিবর্তনগুলি ব্লক করতে সীমাবদ্ধ করুন
প্রিন্ট $foo; # প্রিন্ট '1'!
}

'1' প্রিন্ট করবে, কারণ $foo-এর একটি রেফারেন্স রয়েছে মূল $বার। যে ছিল
"স্থানীয়()" দ্বারা স্টাফ করা হয়েছে এবং ব্লকটি শেষ হলে পুনরুদ্ধার করা হবে। কারণ
ভেরিয়েবলগুলি টাইপগ্লোবের মাধ্যমে অ্যাক্সেস করা হয়, আপনি একটি উপনাম তৈরি করতে "*foo = *bar" ব্যবহার করতে পারেন
যা স্থানীয়করণ করা যেতে পারে। (কিন্তু সচেতন থাকুন যে এর মানে আপনার আলাদা @foo এবং থাকতে পারে না
@বার, ইত্যাদি)

যা এই সবগুলিকে গুরুত্বপূর্ণ করে তোলে তা হল রপ্তানিকারক মডিউল গ্লোব অ্যালিয়াসিং হিসাবে ব্যবহার করে৷
আমদানি/রপ্তানি প্রক্রিয়া। আপনি সঠিকভাবে একটি পরিবর্তনশীল স্থানীয়করণ করতে পারেন কিনা
একটি মডিউল থেকে রপ্তানি কিভাবে রপ্তানি করা হয়েছিল তার উপর নির্ভর করে:

@EXPORT = qw($FOO); # সাধারণ ফর্ম, স্থানীয়করণ করা যাবে না
@EXPORT = qw(*FOO); # স্থানীয়করণ করা যেতে পারে

আপনি যেখানে সম্পূর্ণ যোগ্য নাম ($Package::FOO) ব্যবহার করে প্রথম ক্ষেত্রে কাজ করতে পারেন
আপনার একটি স্থানীয় মান প্রয়োজন, অথবা "*FOO = *প্যাকেজ::FOO" বলে এটিকে ওভাররাইড করে
লিপি.

"*x = \$y" মেকানিজমটি ব্যবহার করা যেতে পারে সস্তা রেফারেন্সগুলিকে পাস করতে বা ফেরত দিতে
আপনি যদি পুরো জিনিসটি অনুলিপি করতে না চান তবে সাবরুটিনগুলি। বরাদ্দ করার সময় এটি শুধুমাত্র কাজ করে
গতিশীল ভেরিয়েবল, আভিধানিক নয়।

%some_hash = (); # আমার হতে পারে না()
*some_hash = fn(\%ather_hash);
সাব fn {
স্থানীয় *হাশসিম = শিফট;
# এখন সাধারণভাবে %hashsym ব্যবহার করুন এবং আপনি
# কলারের %অন্য_হ্যাশকে প্রভাবিত করবে
আমার %nhash = (); # যা ইচ্ছে কর
ফেরত \%nhash;
}

ফিরে আসার পরে, রেফারেন্সটি দ্বারা নির্দিষ্ট প্রতীক টেবিলে হ্যাশ স্লটটি ওভাররাইট করবে
*কিছু_হ্যাশ টাইপগ্লোব। এটি সস্তায় রেফারেন্সগুলি পাস করার কিছুটা জটিল উপায়
আপনি স্পষ্টভাবে dereference ভেরিয়েবল মনে রাখতে চান না যখন.

প্রতীক টেবিলের আরেকটি ব্যবহার হল "ধ্রুবক" স্কেলার তৈরির জন্য।

*PI = \3.14159265358979;

এখন আপনি $PI পরিবর্তন করতে পারবেন না, যা সম্ভবত সব মিলিয়ে একটি ভাল জিনিস। এই একই না
একটি ধ্রুবক সাবরুটিন হিসাবে, যা কম্পাইল-টাইমে অপ্টিমাইজেশানের বিষয়। একটি ধ্রুবক
সাবরুটিন হল একটি প্রোটোটাইপ যাতে কোন যুক্তি না নেওয়া এবং একটি ধ্রুবক অভিব্যক্তি ফেরত দেওয়া যায়।
এই সম্পর্কে বিস্তারিত জানার জন্য perlsub দেখুন। "ব্যবহার ধ্রুবক" pragma এর জন্য একটি সুবিধাজনক শর্টহ্যান্ড
এইগুলো.

আপনি *foo{PACKAGE} এবং *foo{NAME} বলতে পারেন কোন নাম এবং প্যাকেজ *foo চিহ্নটি খুঁজে বের করতে
টেবিল এন্ট্রি থেকে আসে. এটি একটি সাবরুটিনে কার্যকর হতে পারে যা টাইপগ্লোব হিসাবে পাস করে
যুক্তি:

উপ-ident_typeglob {
আমার $গ্লোব = শিফট;
প্রিন্ট 'তুমি আমাকে দিয়েছ', *{$glob}{PACKAGE},
'::', *{$glob}{NAME}, "\n";
}
সনাক্ত_টাইপগ্লোব *foo;
পরিচয়_টাইপগ্লোব *বার::বাজ;

এই প্রিন্ট

আপনি আমাকে প্রধান দিয়েছেন::foo
তুমি আমাকে বার::বাজ দিয়েছ

*foo{THING} স্বরলিপিটি পৃথক উপাদানগুলির উল্লেখ পেতেও ব্যবহার করা যেতে পারে
এর *foo. perlref দেখুন।

সাবরুটিন সংজ্ঞা (এবং ঘোষণা, এই বিষয়ে) অগত্যা হতে হবে না
প্যাকেজে অবস্থিত যার প্রতীক টেবিল তারা দখল করে। আপনি একটি সাবরুটিন সংজ্ঞায়িত করতে পারেন
সাবরুটিনের নাম স্পষ্টভাবে যোগ্যতা অর্জন করে এর প্যাকেজের বাইরে:

প্যাকেজ প্রধান;
সাব Some_package::foo { ... } # &foo কিছু_প্যাকেজে সংজ্ঞায়িত করা হয়েছে

কম্পাইলের সময় টাইপগ্লোব অ্যাসাইনমেন্টের জন্য এটি একটি সংক্ষিপ্ত বিবরণ:

শুরু করুন { *Some_package::foo = sub { ... } }

এবং এটি হল না লেখার মত একই:

{
প্যাকেজ কিছু_প্যাকেজ;
সাব foo { ... }
}

প্রথম দুটি সংস্করণে, সাবরুটিনের শরীরটি আভিধানিকভাবে প্রধান প্যাকেজে রয়েছে,
না কিছু_প্যাকেজে। তাই এই মত কিছু:

প্যাকেজ প্রধান;

$Some_package::name = "fred";
$main::name = "বার্নি";

সাব Some_package::foo {
প্রিন্ট করুন "", __PACKAGE__, ": \$name is '$name'\n";
}

Some_package ::foo();

কপি করে প্রিন্ট:

প্রধান: $ নাম হল 'বার্নি'

বরং:

Some_package এ: $name is 'fred'

এটি সুপার:: কোয়ালিফায়ার ব্যবহারের জন্যও প্রভাব ফেলে (দেখুন perlobj)।

শুরু আনচেক, চেক, INIT এবং শেষ
পাঁচটি বিশেষভাবে নামযুক্ত কোড ব্লক একটি দৌড়ের শুরুতে এবং শেষে কার্যকর করা হয়
পার্ল প্রোগ্রাম। এগুলি হল "শুরু", "ইউনিটচেক", "চেক", "INIT" এবং "শেষ" ব্লক।

একটি সাবরুটিনের চেহারা দেওয়ার জন্য এই কোড ব্লকগুলিকে "সাব" দিয়ে উপসর্গ করা যেতে পারে
(যদিও এটি ভাল শৈলী হিসাবে বিবেচিত হয় না)। এক এই কোড ব্লক যে নোট করা উচিত
নামকৃত সাবরুটিন হিসাবে সত্যিই বিদ্যমান নেই (তাদের চেহারা সত্ত্বেও)। যে জিনিস দেয়
এই দূরে আপনি থাকতে পারে যে সত্য অধিক চেয়ে এক একটি প্রোগ্রামে এই কোড ব্লকগুলির মধ্যে,
এবং তারা পাবে সব উপযুক্ত মুহূর্তে মৃত্যুদন্ড কার্যকর করা হয়েছে। তাই আপনি কোনো কার্যকর করতে পারবেন না
নামের এই কোড ব্লক.

একটি "BEGIN" কোড ব্লক যত তাড়াতাড়ি সম্ভব নির্বাহ করা হয়, যে মুহূর্তে এটি সম্পূর্ণ হয়৷
সংজ্ঞায়িত, এমনকি বাকি থাকা ফাইল (বা স্ট্রিং) পার্স করার আগেই। তোমার থাকতে পারে
একটি ফাইলের মধ্যে একাধিক "শুরু" ব্লক (বা ইভাল'ড স্ট্রিং); তারা ক্রমে মৃত্যুদন্ড কার্যকর করা হবে
সংজ্ঞা যেহেতু একটি "BEGIN" কোড ব্লক অবিলম্বে কার্যকর হয়, এটি সংজ্ঞা টানতে পারে
সাবরুটিন এবং অন্যান্য ফাইল থেকে যথাসময়ে বাকি কম্পাইলে দৃশ্যমান হবে
এবং চালানোর সময়। একবার একটি "BEGIN" চালানো হলে, এটি অবিলম্বে অনির্ধারিত হয় এবং এটি ব্যবহৃত যেকোন কোড
পার্লের মেমরি পুলে ফিরে আসেন।

একটি "END" কোড ব্লক যতটা সম্ভব দেরিতে কার্যকর করা হয়, অর্থাৎ, পার্ল শেষ হওয়ার পরে
প্রোগ্রাম চালাচ্ছেন এবং দোভাষীর ঠিক আগে প্রস্থান করা হচ্ছে, এমনকি যদি এটি প্রস্থান হয়
একটি হিসাবে মরা () ফাংশন (কিন্তু যদি এটি এর মাধ্যমে অন্য প্রোগ্রামে রূপান্তরিত হয় তবে নয়
"exec", বা একটি সংকেত দ্বারা জল থেকে উড়িয়ে দেওয়া হচ্ছে--আপনাকে নিজেকেই ফাঁদে ফেলতে হবে (যদি
আপনি করতে পারেন।) একটি ফাইলের মধ্যে আপনার একাধিক "END" ব্লক থাকতে পারে--সেগুলি বিপরীতভাবে কার্যকর হবে
সংজ্ঞা আদেশ; অর্থাৎ: লাস্ট ইন, ফার্স্ট আউট (LIFO)। "END" ব্লকগুলি কার্যকর করা হয় না৷
যখন আপনি "-c" সুইচ দিয়ে পার্ল চালান, অথবা যদি সংকলন ব্যর্থ হয়।

নোট করুন যে "END" কোড ব্লক হয় না একটি স্ট্রিং "eval()" এর শেষে কার্যকর করা হয়েছে: যদি থাকে "END"
কোড ব্লকগুলি একটি স্ট্রিং "eval() এ তৈরি করা হয়, সেগুলি অন্য যে কোনও মতোই কার্যকর করা হবে
দোভাষী হওয়ার ঠিক আগে LIFO অর্ডারে সেই প্যাকেজের "END" কোড ব্লক
প্রস্থান

একটি "END" কোড ব্লকের ভিতরে, $? প্রোগ্রামটি পাস করতে যাচ্ছে এমন মান রয়েছে
"প্রস্থান()"। আপনি $ সংশোধন করতে পারেন? প্রোগ্রামের প্রস্থান মান পরিবর্তন করতে। পরিবর্তন থেকে সাবধান
$? দুর্ঘটনাক্রমে (যেমন "সিস্টেম" এর মাধ্যমে কিছু চালানোর মাধ্যমে)।

একটি "END" ব্লকের ভিতরে, "${^GLOBAL_PHASE}" এর মান হবে "END"।

"UNITCHECK", "চেক" এবং "INIT" কোড ব্লকগুলি এর মধ্যে রূপান্তরটি ধরতে উপযোগী।
কম্পাইলেশন ফেজ এবং মূল প্রোগ্রামের এক্সিকিউশন ফেজ।

"UNITCHECK" ব্লকগুলিকে সংজ্ঞায়িত করা ইউনিটের ঠিক পরে চালানো হয়। দ্য
প্রধান প্রোগ্রাম ফাইল এবং এটি লোড করা প্রতিটি মডিউল হল সংকলন ইউনিট, যেমন স্ট্রিং "eval",
রান-টাইম কোড একটি রেজেক্সে "(?{ })" কনস্ট্রাক্ট ব্যবহার করে কম্পাইল করা হয়, "ফাইল করতে কল করে",
কমান্ড লাইনে "-e" স্যুইচ করার পরে "ফাইল প্রয়োজন", এবং কোড।

"BEGIN" এবং "UNITCHECK" ব্লকগুলি ইন্টারপ্রেটারের পর্যায়ে সরাসরি সম্পর্কিত নয়।
এগুলি যে কোনও পর্যায়ে তৈরি এবং কার্যকর করা যেতে পারে।

"চেক" কোড ব্লকের ঠিক পরে চালানো হয় প্রারম্ভিক পার্ল কম্পাইল পর্ব শেষ হয় এবং এর আগে
রান টাইম শুরু হয়, LIFO ক্রমে। পার্ল কম্পাইলার স্যুটে "চেক করুন" কোড ব্লক ব্যবহার করা হয়
প্রোগ্রামের সংকলিত অবস্থা সংরক্ষণ করতে।

একটি "চেক" ব্লকের ভিতরে, "${^GLOBAL_PHASE}" এর মান হবে "চেক"।

"ফার্স্ট ইন, ফার্স্ট"-এ পার্ল রানটাইম কার্যকর করার ঠিক আগে "INIT" ব্লক চালানো হয়
আউট" (FIFO) অর্ডার।

একটি "INIT" ব্লকের ভিতরে, "${^GLOBAL_PHASE}" এর মান হবে "INIT"।

কোডে "চেক" এবং "ইনআইটি" ব্লকগুলি "প্রয়োজনীয়", স্ট্রিং "ডু", বা স্ট্রিং "ইভাল" দ্বারা সংকলিত
যদি সেগুলি মূল সংকলন পর্ব শেষ হওয়ার পরে ঘটে তবে তা কার্যকর করা হবে না; এটা হতে পারে
mod_perl এবং অন্যান্য স্থায়ী পরিবেশে একটি সমস্যা হতে পারে যা এই ফাংশনগুলি ব্যবহার করে
রানটাইমে কোড লোড করুন।

আপনি যখন ব্যবহার -n এবং -p পার্লে স্যুইচ করে, "BEGIN" এবং "END" ঠিক যেমন তারা কাজ করে
অজস্র, একটি অধঃপতিত মামলা হিসাবে. আপনি যখন ব্যবহার করেন তখন উভয় "শুরু" এবং "চেক" ব্লকগুলি চালানো হয়৷ -c
একটি কম্পাইল-শুধু সিনট্যাক্স চেকের জন্য স্যুইচ করুন, যদিও আপনার প্রধান কোড নয়।

সার্জারির শুরু পরীক্ষা প্রোগ্রাম এটি সব পরিষ্কার করে, অবশেষে:

#!/usr/bin/perl

# শুরু পরীক্ষা

প্রিন্ট "10। সাধারণ কোড রানটাইমে চলে।\n";

শেষ { মুদ্রণ "16। তাই এই গল্পের শেষ।\n" }
INIT { প্রিন্ট করুন " 7. INIT ব্লকগুলি রানটাইমের ঠিক আগে FIFO চালায়৷\n" }
আনচেক {
প্রিন্ট " 4. এবং তাই কোনো চেক ব্লক করার আগে।\n"
}
চেক করুন { মুদ্রণ " 6৷ তাই এটি ষষ্ঠ লাইন৷\n" }

প্রিন্ট "11। এটি অবশ্যই ক্রমানুসারে চলে।\n";

শুরু করুন { মুদ্রণ করুন " 1। সংকলনের সময় শুরু ব্লকগুলি FIFO চালায়৷\n" }
শেষ { প্রিন্ট করুন "15। গল্পের বাকি অংশের জন্য পার্লমড পড়ুন।\n" }
চেক করুন { মুদ্রণ " 5. চেক ব্লকগুলি সমস্ত সংকলনের পরে LIFO চালায়৷\n" }
INIT { প্রিন্ট করুন " 8। পার্লের -c সুইচ ব্যবহার করে এটি আবার চালান।\n" }

প্রিন্ট "12. এটি অ্যান্টি-অস্পষ্ট কোড।\n";

END { প্রিন্ট করুন "14. END ব্লকগুলি LIFO কে প্রস্থান করার সময় চালায়৷\n" }
শুরু করুন { মুদ্রণ করুন " 2৷ তাই এই লাইনটি দ্বিতীয়টি আসে৷\n" }
আনচেক {
প্রিন্ট " 3. প্রতিটি ফাইল কম্পাইল হওয়ার পরে ইউনিচেক ব্লকগুলি LIFO চালায়৷\n"
}
INIT { প্রিন্ট করুন " 9৷ আপনি এখনই পার্থক্য দেখতে পাবেন৷\n" }

প্রিন্ট করুন "13. এটি শুধুমাত্র _looks_ মত এটি বিভ্রান্তিকর হওয়া উচিত।\n";

__শেষ__

পার্ল ক্লাস
পার্লে কোন বিশেষ ক্লাস সিনট্যাক্স নেই, তবে একটি প্যাকেজ একটি ক্লাস হিসাবে কাজ করতে পারে যদি এটি প্রদান করে
পদ্ধতি হিসাবে কাজ করার জন্য সাবরুটিন। এই ধরনের প্যাকেজ থেকে এর কিছু পদ্ধতিও পাওয়া যেতে পারে
অন্য একটি ক্লাস (প্যাকেজ) অন্য প্যাকেজের নাম(গুলি) এর গ্লোবাল @ISA অ্যারেতে তালিকাভুক্ত করে
(যা একটি প্যাকেজ বিশ্বব্যাপী হতে হবে, একটি আভিধানিক নয়)।

এই বিষয়ে আরও জানতে, perlootut এবং perlobj দেখুন।

পার্ল মডিউল
একটি মডিউল হল একটি লাইব্রেরি ফাইলে সম্পর্কিত ফাংশনগুলির একটি সেট, যেমন, একটি পার্ল প্যাকেজ
ফাইলের মতো একই নাম। এটি বিশেষভাবে অন্যান্য মডিউল বা দ্বারা পুনরায় ব্যবহারযোগ্য হতে ডিজাইন করা হয়েছে
প্রোগ্রাম এটি এর কিছু প্রতীক রপ্তানির জন্য একটি প্রক্রিয়া প্রদান করে এটি করতে পারে
যেকোনো প্যাকেজের প্রতীক টেবিল এটি ব্যবহার করে, অথবা এটি একটি শ্রেণী সংজ্ঞা হিসাবে কাজ করতে পারে এবং
ক্লাস এবং এর অবজেক্টে মেথড কলের মাধ্যমে এর শব্দার্থবিদ্যাকে অন্তর্নিহিতভাবে উপলব্ধ করা,
স্পষ্টভাবে কিছু রপ্তানি ছাড়া. অথবা এটি উভয়েরই কিছুটা করতে পারে।

উদাহরণস্বরূপ, Some::Module নামে একটি ঐতিহ্যগত, নন-OO মডিউল শুরু করতে, একটি ফাইল তৈরি করুন
নামক কিছু/মডিউল.pm এবং এই টেমপ্লেট দিয়ে শুরু করুন:

প্যাকেজ কিছু::মডিউল; # ধরে নেয় Some/Module.pm

কঠোর ব্যবহার করুন;
সতর্কতা ব্যবহার করুন;

শুরু {
রপ্তানিকারক প্রয়োজন;

# সংস্করণ পরীক্ষা করার জন্য সংস্করণ সেট করুন
আমাদের $VERSION = 1.00;

# রপ্তানিকারক থেকে রপ্তানি ফাংশন এবং ভেরিয়েবলের উত্তরাধিকার
আমাদের @ISA = qw(রপ্তানিকারক);

# ফাংশন এবং ভেরিয়েবল যা ডিফল্টরূপে রপ্তানি করা হয়
আমাদের @EXPORT = qw(func1 func2);

# ফাংশন এবং ভেরিয়েবল যা ঐচ্ছিকভাবে রপ্তানি করা যেতে পারে
আমাদের @EXPORT_OK = qw($Var1 %Hashit func3);
}

# রপ্তানি করা প্যাকেজ গ্লোবাল এখানে যান
আমাদের $Var1 = '';
আমাদের % Hashit = ();

#টি অ-রপ্তানিযোগ্য প্যাকেজ গ্লোবাল এখানে যায়
# (এগুলি এখনও $Some::Module::stuff হিসাবে অ্যাক্সেসযোগ্য)
আমাদের @আরো = ();
আমাদের $stuff = '';

# ফাইল-প্রাইভেট লেকসিকাল এখানে যায়, যে কোনো ফাংশন ব্যবহার করার আগে
আমার $priv_var = '';
আমার %secret_hash = ();

# এখানে বন্ধ হিসাবে একটি ফাইল-ব্যক্তিগত ফাংশন আছে,
# $priv_func->();
আমার $priv_func = সাব {
...
};

# আপনার সমস্ত ফাংশন তৈরি করুন, রপ্তানি হোক বা না হোক;
# {} স্টাবগুলিতে আকর্ষণীয় কিছু রাখতে মনে রাখবেন
সাব ফাংশন1 { ... }
সাব ফাংশন2 { ... }

# এটি রপ্তানি করা হয় না, তবে সরাসরি কল করা যেতে পারে
# কিছু হিসাবে::মডিউল::func3()
সাব ফাংশন3 { ... }

শেষ { ... } # মডিউল ক্লিন-আপ কোড এখানে (গ্লোবাল ডেস্ট্রাক্টর)

1; # ফাইল থেকে একটি সত্য মান ফেরত দিতে ভুলবেন না

তারপর ঘোষণা করতে যান এবং কোনো যোগ্যতা ছাড়াই আপনার ভেরিয়েবল ফাংশনে ব্যবহার করুন। দেখা
রপ্তানিকারক এবং মডিউল তৈরিতে মেকানিক্স এবং শৈলী সংক্রান্ত সমস্যাগুলির বিশদ বিবরণের জন্য perlmodlib।

পার্ল মডিউল আপনার প্রোগ্রামে অন্তর্ভুক্ত করা হয়েছে বলে

মডিউল ব্যবহার করুন;

or

মডিউল তালিকা ব্যবহার করুন;

এই ঠিক সমতুল্য

BEGIN { প্রয়োজন 'Module.pm'; 'মডিউল'->আমদানি; }

or

BEGIN { প্রয়োজন 'Module.pm'; 'মডিউল'->আমদানি (লিস্ট); }

বিশেষ ক্ষেত্রে

মডিউল ব্যবহার করুন ();

এর ঠিক সমতুল্য

BEGIN { প্রয়োজন 'Module.pm'; }

সমস্ত পার্ল মডিউল ফাইলের এক্সটেনশন আছে .pm. "ব্যবহার" অপারেটর এটি অনুমান করে তাই আপনি
বানান করতে হবে না"মডিউল.pm"উদ্ধৃতিতে। এটি নতুনকে আলাদা করতেও সাহায্য করে
পুরানো থেকে মডিউল .pl এবং .ph নথি পত্র. মডিউল নামগুলিও বড় করা হয় যদি না সেগুলি হয়৷
pragmas হিসাবে কাজ করা; pragmas কার্যকর কম্পাইলার নির্দেশাবলী, এবং কখনও কখনও হয়
বলা হয় "প্র্যাগম্যাটিক মডিউল" (বা এমনকি "প্রাগমাটা" যদি আপনি একজন ক্লাসিস্ট হন)।

দুটি বিবৃতি:

SomeModule প্রয়োজন;
প্রয়োজন "SomeModule.pm";

দুটি উপায়ে একে অপরের থেকে পৃথক। প্রথম ক্ষেত্রে, মডিউলের যেকোনো ডাবল কোলন
নাম, যেমন "কিছু::মডিউল", আপনার সিস্টেমের ডিরেক্টরি বিভাজকের মধ্যে অনুবাদ করা হয়,
সাধারণত "/"। দ্বিতীয় ক্ষেত্রে না, এবং আক্ষরিকভাবে নির্দিষ্ট করতে হবে। দ্য
অন্য পার্থক্য হল যে কম্পাইলার ব্যবহার করে প্রথম "প্রয়োজন" ক্লুগুলি দেখা
"$ob = purge SomeModule" এর মতো "SomeModule" জড়িত পরোক্ষ অবজেক্ট নোটেশন
পদ্ধতি কল, ফাংশন কল নয়। (হ্যাঁ, এটি সত্যিই একটি পার্থক্য করতে পারে।)

যেহেতু "ব্যবহার" বিবৃতিটি একটি "শুরু" ব্লককে বোঝায়, তাই শব্দার্থের আমদানি ঘটবে
"ব্যবহার" বিবৃতিটি সংকলিত হওয়ার সাথে সাথে, বাকি ফাইলটি সংকলিত হওয়ার আগে। এই
এটি কীভাবে একটি প্রাগমা প্রক্রিয়া হিসাবে কাজ করতে সক্ষম হয় এবং মডিউলগুলি কীভাবে ঘোষণা করতে সক্ষম হয়
সাবরুটিন যা তারপরে বর্তমানের বাকি অংশের জন্য তালিকা বা ইউনারি অপারেটর হিসাবে দৃশ্যমান
ফাইল আপনি "ব্যবহার" এর পরিবর্তে "প্রয়োজন" ব্যবহার করলে এটি কাজ করবে না। "প্রয়োজন" দিয়ে আপনি করতে পারেন
এই সমস্যায় পড়ুন:

Cwd প্রয়োজন; # Cwd:: অ্যাক্সেসযোগ্য করুন
$here = Cwd::getcwd();

Cwd ব্যবহার করুন; Cwd থেকে # আমদানি নাম::
$এখানে = getcwd();

Cwd প্রয়োজন; # Cwd:: অ্যাক্সেসযোগ্য করুন
$here = getcwd(); # উফ! কোন প্রধান নেই::getcwd()

সাধারণভাবে, "মডিউল প্রয়োজন" এর চেয়ে "ব্যবহার মডিউল ()" সুপারিশ করা হয়, কারণ এটি নির্ধারণ করে
কম্পাইলের সময়ে মডিউলের প্রাপ্যতা, আপনার প্রোগ্রামের এক্সিকিউশনের মাঝখানে নয়। একটি
ব্যতিক্রম হবে যদি দুটি মডিউল একে অপরকে "ব্যবহার" করার চেষ্টা করে এবং প্রত্যেকটিকে একটি বলে
যে অন্য মডিউল থেকে ফাংশন. সেই ক্ষেত্রে, পরিবর্তে "প্রয়োজন" ব্যবহার করা সহজ।

পার্ল প্যাকেজগুলি অন্যান্য প্যাকেজ নামের মধ্যে নেস্ট করা যেতে পারে, তাই আমাদের প্যাকেজের নাম থাকতে পারে
"::" ধারণকারী। কিন্তু যদি আমরা প্যাকেজের নামটি সরাসরি ফাইলের নাম হিসাবে ব্যবহার করি তবে এটি তৈরি করবে
কিছু সিস্টেমে অদম্য বা অসম্ভব ফাইলনামের জন্য। অতএব, যদি একটি মডিউলের নাম হয়,
বলুন, "টেক্সট::সাউন্ডেক্স", তাহলে এর সংজ্ঞা আসলে লাইব্রেরি ফাইলে পাওয়া যায়
টেক্সট/Soundex.pm.

পার্ল মডিউল সবসময় একটি আছে .pm ফাইল, কিন্তু গতিশীলভাবে সংযুক্ত এক্সিকিউটেবলও থাকতে পারে
(প্রায়শই শেষ হয় .so) বা অটোলোডেড সাবরুটিন সংজ্ঞা (প্রায়ই শেষ হয় .al)
মডিউলের সাথে যুক্ত। যদি তাই হয়, এই ব্যবহারকারীদের সম্পূর্ণ স্বচ্ছ হবে
মডিউল এটার দায়িত্ব .pm লোড করার জন্য ফাইল (বা স্বয়ংক্রিয়ভাবে লোড করার ব্যবস্থা করুন)
অতিরিক্ত কার্যকারিতা। উদাহরণস্বরূপ, যদিও POSIX মডিউল উভয়ই করতে পারে
গতিশীল লোডিং এবং স্বয়ংক্রিয় লোডিং, ব্যবহারকারী এটি সব পেতে শুধু "POSIX ব্যবহার করুন" বলতে পারেন।

মেকিং তোমার মডিউল থ্রেড নিরাপদ
পার্ল ইন্টারপ্রেটার থ্রেড (থ্রেড) নামে এক ধরনের থ্রেড সমর্থন করে। এই থ্রেড পারেন
স্পষ্টভাবে এবং নিহিতভাবে ব্যবহার করা হবে।

থ্রেডগুলি ডেটা ট্রি ক্লোন করার মাধ্যমে কাজ করে যাতে কোনও ডেটা বিভিন্ন মধ্যে ভাগ করা না হয়
থ্রেড এই থ্রেডগুলি "থ্রেড" মডিউল ব্যবহার করে বা করে ব্যবহার করা যেতে পারে কাঁটাচামচ () on
win32 (জাল কাঁটাচামচ () সমর্থন)। যখন একটি থ্রেড ক্লোন করা হয় তখন সমস্ত পার্ল ডেটা ক্লোন করা হয়, তবে অ-
পার্ল ডেটা স্বয়ংক্রিয়ভাবে ক্লোন করা যায় না। 5.8.0 এর পরে পার্লের "ক্লোন" এর জন্য সমর্থন রয়েছে
বিশেষ সাবরুটিন। "ক্লোন"-এ আপনি যা করতে চান তা করতে পারেন, যেমন উদাহরণস্বরূপ
প্রয়োজনে নন-পার্ল ডেটার ক্লোনিং পরিচালনা করুন। "ক্লোন" একবার ক্লাস হিসাবে ডাকা হবে
প্রতিটি প্যাকেজের জন্য পদ্ধতি যা এটি সংজ্ঞায়িত করেছে (বা এটি উত্তরাধিকারসূত্রে পেয়েছে)। এটা বলা হবে
নতুন থ্রেডের প্রেক্ষাপট, তাই সমস্ত পরিবর্তন নতুন এলাকায় করা হয়। বর্তমানে CLONE
ইনভোক্যান্ট প্যাকেজ নাম ব্যতীত অন্য কোনও প্যারামিটার ছাড়াই ডাকা হয়, তবে কোড করা উচিত নয়
অনুমান করুন যে এটি অপরিবর্তিত থাকবে, কারণ এটি সম্ভবত ভবিষ্যতে অতিরিক্ত পরামিতিগুলিতে
ক্লোনিংয়ের অবস্থা সম্পর্কে আরও তথ্য দিতে পাস করা হবে।

আপনি যদি সমস্ত বস্তুকে ক্লোন করতে চান তবে আপনাকে প্যাকেজ প্রতি তাদের ট্র্যাক রাখতে হবে। এই
সহজভাবে একটি হ্যাশ ব্যবহার করে করা হয় এবং স্কেলার::Util::weaken().

5.8.7 এর পরে পার্লের "CLONE_SKIP" বিশেষ সাবরুটিনের জন্য সমর্থন রয়েছে৷ যেমন "ক্লোন",
প্রতি প্যাকেজে একবার "CLONE_SKIP" বলা হয়; যাইহোক, এটি ক্লোনিং শুরু হওয়ার ঠিক আগে বলা হয়,
এবং প্যারেন্ট থ্রেড প্রসঙ্গে। যদি এটি একটি সত্য মান প্রদান করে, তাহলে এর কোনো বস্তু নেই
যে ক্লাস ক্লোন করা হবে; অথবা বরং, সেগুলিকে অনুলিপি করা হবে অশুভ, অসম্পূর্ণ মান হিসাবে। জন্য
উদাহরণ: যদি পিতামাতার মধ্যে একটি একক আশীর্বাদিত হ্যাশের দুটি উল্লেখ থাকে, তাহলে তে
শিশুর পরিবর্তে একটি একক অনির্ধারিত স্কেলার মানের দুটি উল্লেখ থাকবে। এই
একটি মডিউল থ্রেডসেফ তৈরির জন্য একটি সহজ প্রক্রিয়া প্রদান করে; শুধু যোগ করুন "সাব CLONE_SKIP { 1
}" ক্লাসের শীর্ষে, এবং "DESTROY()" এখন প্রতি অবজেক্টে একবার কল করা হবে।
অবশ্যই, যদি শিশু থ্রেড বস্তুর ব্যবহার করা প্রয়োজন, তারপর একটি আরো পরিশীলিত
পন্থা প্রয়োজন।

"CLONE" এর মতো, "CLONE_SKIP" কে বর্তমানে আহ্বানকারী ছাড়া অন্য কোনো প্যারামিটার ছাড়াই বলা হয়৷
প্যাকেজের নাম, যদিও এটি পরিবর্তন হতে পারে। একইভাবে, ভবিষ্যতে সম্প্রসারণের অনুমতি দেওয়ার জন্য,
রিটার্ন মান একটি একক 0 বা 1 মান হওয়া উচিত।

onworks.net পরিষেবা ব্যবহার করে অনলাইনে perlmod ব্যবহার করুন


বিনামূল্যে সার্ভার এবং ওয়ার্কস্টেশন

উইন্ডোজ এবং লিনাক্স অ্যাপ ডাউনলোড করুন

লিনাক্স কমান্ডগুলি

Ad




×
ভি .আই. পি  বিজ্ঞাপন
❤️এখানে কেনাকাটা করুন, বুক করুন, অথবা কিনুন — বিনামূল্যে, পরিষেবাগুলি বিনামূল্যে রাখতে সাহায্য করে।