খালি শব্দ ব্যবহার না করে ক্লাসের নামটি স্পষ্টভাবে উদ্ধৃত করা (যা স্ট্রিং হিসাবে বিবেচিত হয়) সিনট্যাকটিক অস্পষ্টতা এড়ানোর তিনটি পদ্ধতির একটি। Invoking ক্লাস পদ্ধতি বিভাগে perlobj ডকুমেন্টেশন ব্যাখ্যা করে।
যেহেতু পার্ল আপনাকে প্যাকেজ নাম এবং সাবরুটিন নামগুলির জন্য খালি শব্দ ব্যবহার করার অনুমতি দেয়, এটি কখনও কখনও একটি খালি শব্দটির অর্থ ভুলভাবে ব্যাখ্যা করে। উদাহরণস্বরূপ, কনস্ট্রাক্ট Class->new()
হিসাবে পারেন ব্যাখ্যা করা যেতে পারে 'Class'->new()
বা Class()->new()
.In ইংরেজি, দ্বিতীয় ব্যাখ্যা হিসাবে সার্চ "নামের একটি সাবরুটিন কল Class()
, তারপর কল new()
ফেরত মূল্যের ওপর পদ্ধতি হিসেবে Class()
।" যদি Class()
বর্তমান নেমস্পেসে নামক একটি সাবরুটিন থাকে তবে পার্ল সর্বদা Class->new()
দ্বিতীয় বিকল্প হিসাবে ব্যাখ্যা করবে : কোনও কলকে কল দিয়ে
new()
ফিরে আসা বস্তুর কাছে কল Class()
।
নীচের ডেমো দিয়ে ক্রিয়াতে এই বিজোড় কেসটি দেখুন।
#! /usr/bin/env perl
use strict;
use warnings;
sub Type::Tiny { print "Returning Bogus\n" ; return "Bogus" }
sub Type::Tiny::new { print "Type::Tiny::new\n" }
sub Bogus::new { print "Bogus::new\n" }
my $class = "Type::Tiny";
Type::Tiny->new;
Type::Tiny::->new;
"Type::Tiny"->new;
$class->new;
এর আউটপুট হয়
ফিরতি বোগাস
বাজে :: নতুন
প্রকার :: ক্ষুদ্র :: নতুন
প্রকার :: ক্ষুদ্র :: নতুন
প্রকার :: ক্ষুদ্র :: নতুন
উপরে উল্লিখিত ডকুমেন্টেশন বিভাগের বাকী অংশটি কীভাবে অবাক করে দেওয়া আচরণ বা অসাবধানতা ত্রুটি থেকে রক্ষা করতে পারে তা দেখায়।
আপনি পার্লকে প্রথম ব্যাখ্যাটি ( অর্থাত্ শ্রেণীর নামকরণের পদ্ধতি হিসাবে "Class"
) দুটি উপায়ে ব্যবহার করতে বাধ্য করতে পারেন । প্রথমত, আপনি ::
শ্রেণীর নামের সাথে একটি যুক্ত করতে পারেন :
Class::->new()
পার্ল সর্বদা এটি একটি পদ্ধতি কল হিসাবে ব্যাখ্যা করবে interpret
বিকল্পভাবে, আপনি শ্রেণীর নামটি উদ্ধৃত করতে পারেন:
'Class'->new()
অবশ্যই, শ্রেণীর নামটি যদি স্কেলারে থাকে তবে পার্ল সঠিক কাজটিও করবে:
my $class = 'Class';
$class->new();
আপনার প্রশ্নের প্রয়োগ করে, নীচের সমস্ত কল সমান।
Type::Tiny::->new( … );
"Type::Tiny"->new( … );
my $class = "Type::Tiny";
$class->new( … );
::
শেষের দিকে সংযোজনে একটি সহায়ক সতর্কতা তৈরির সুবিধা রয়েছে। বলুন আপনি দুর্ঘটনাক্রমে টাইপ করেছেন
Type::Tinny::->new;
যে উত্পাদন করে
বারিওয়ার্ড "টাইপ করুন :: টিনি ::"। / চেষ্টা লাইনে 15 এ অস্তিত্বহীন প্যাকেজকে বোঝায়।
প্যাকেজ "টাইপ করুন :: তিন্নি" এর মাধ্যমে অবজেক্ট পদ্ধতি "নতুন" সনাক্ত করা যায় না (সম্ভবত আপনি "টাইপ করুন: টিনি" লোড করতে ভুলে গিয়েছিলেন।) / লাইন 15 এ।
Foo::->new
, যেমন আমি ইকেগামি থেকে শিখেছি।