@_
পার্ল এর অর্থ কী ?
উত্তর:
পার্লডোক পার্লভার কোনও বিশেষ-নামযুক্ত পার্ল ভেরিয়েবল তথ্য পরীক্ষা করার জন্য প্রথম স্থান।
উদ্ধৃতি:
@_
: একটি সাব্রোটিনের মধ্যে অ্যারেতে@_
সেই সাব্রুটিনে পাস হওয়া প্যারামিটার থাকে।
পারেলভার থেকে লিঙ্কযুক্ত পার্লডোক পার্লসব (পার্ল সাবরুটাইনস) এ আরও বিশদ পাওয়া যাবে :
অ্যারে দেখানোর ক্ষেত্রে যে কোনও যুক্তি পাস হয়েছে
@_
।অতএব, আপনি যদি দুই আর্গুমেন্ট সহ একটি ফাংশন বলা হয়, ঐ সংরক্ষণ করা হবে
$_[0]
এবং$_[1]
।অ্যারেটি
@_
একটি স্থানীয় অ্যারে , তবে এর উপাদানগুলি আসল স্কেলার পরামিতিগুলির জন্য উপকরণ । বিশেষত, যদি একটি এলিমেন্ট $ _ [0] আপডেট হয় তবে সংশ্লিষ্ট আর্গুমেন্টটি আপডেট হয় (বা এটি আপডেটযোগ্য না হলে একটি ত্রুটি ঘটে)।যদি একটি আর্গুমেন্ট একটি অ্যারে বা হ্যাশ উপাদান থাকে যা ফাংশন বলা হওয়ার আগে উপস্থিত ছিল না, সেই উপাদানটি তখনই তৈরি করা হয় যখন (এবং যদি) এটি সংশোধন করা হয় বা এর কোনও রেফারেন্স নেওয়া হয়। (পার্লের পূর্ববর্তী কয়েকটি সংস্করণ উপাদানটিকে নির্ধারিত ছিল কি না সে উপাদানটি তৈরি করেছিল)) সম্পূর্ণ অ্যারেতে নিয়োগ দেওয়া @__ al যে এলিয়াসিং সরিয়ে দেয় এবং কোনও যুক্তি আপডেট করে না।
সাধারণত, আপনি ভেরিয়েবলটি ব্যবহার করে একটি সাবকে দেওয়া প্যারামিটারগুলি প্রসারিত করুন @_
:
sub test{
my ($a, $b, $c) = @_;
...
}
# call the test sub with the parameters
test('alice', 'bob', 'charlie');
পেরিকক্রিটিক দ্বারা সঠিকভাবে দাবি করা হয়েছে ।
perlcritic
, ব্যক্তিগতভাবে আমি মনে করি যে এটি কোনও ফাংশনের জন্য সবচেয়ে ভাল তবে কোনও পদ্ধতির জন্য shift
এটি স্ব-রেফারেন্সে কার্যকর, তারপরে @_
অ্যারেটি আনপ্যাক করুন । এটি পরিষ্কার করে দেয় যে এটি একটি পদ্ধতি এবং পদ্ধতিটি কিছু নির্দিষ্ট পরামিতি নেয়
একটি প্রথম হিট জন্য সার্চperl @_
বলছেন এই :
@_ হ'ল একটি সাব থেকে আগত পরামিতিগুলির তালিকা।
এটির এর আরও দীর্ঘ এবং আরও বিশদ বিবরণ রয়েছে।
প্রশ্নটি ছিল পার্লের @_
অর্থ কী । যে প্রশ্নের উত্তর যে যতটুকু হয় $_
মানে এটা পার্ল এ, @_
একভাবে মানে তারা ।
কেউ এই সমালোচনামূলক দৃষ্টিভঙ্গি উল্লেখ করেছি বলে মনে হয় তার পাশাপাশি - অর্থ তাহাদেরই ।
ফলস্বরূপ এগুলি উভয় সর্বনাম হিসাবে বা কখনও কখনও টোপিকালাইজার হিসাবে ব্যবহৃত হয়।
এগুলির সাধারণত নামকরণ পূর্বসূরি থাকে, যদিও সবসময় না।
আপনি বেশিরভাগ ক্ষেত্রে স্বতন্ত্র ভেরিয়েবলের জন্য শিফটও ব্যবহার করতে পারেন:
$var1 = shift;
এটি এমন একটি বিষয় যেখানে আপনার আরও গবেষণা করা উচিত কারণ পার্লের আপনার সাব রুটিনের ভিতরে বাইরের তথ্য অ্যাক্সেস করার বিভিন্ন আকর্ষণীয় উপায় রয়েছে।
এছাড়াও যদি কোনও ফাংশন একটি অ্যারে প্রদান করে তবে ফাংশনটি তার পরিবর্তিত ডেটা নীচের মতো কোনও ভেরিয়েবলের জন্য বরাদ্দ না করে কল করা হয়। এখানে বিভক্ত () বলা হয়, তবে এটি কোনও ভেরিয়েবলের জন্য বরাদ্দ করা হয় না। আমরা @_ এর মাধ্যমে পরে এর ফিরিয়ে নেওয়া ডেটা অ্যাক্সেস করতে পারি
$str = "Mr.Bond|Chewbaaka|Spider-Man";
split(/\|/, $str);
print @_[0]; # 'Mr.Bond'
এটি স্ট্রিংকে বিভক্ত করবে $str
এবং অ্যারে সেট করবে @_
।
@
একটি অ্যারের জন্য ব্যবহৃত হয়।
সাব্রোটিনে বা আপনি যখন পার্লে কোনও ফাংশন কল করেন, আপনি প্যারামিটার তালিকাটি পাস করতে পারেন। সেক্ষেত্রে, @_
ফাংশনে প্যারামিটার তালিকা পাস ব্যবহার করা যেতে পারে হয়:
sub Average{
# Get total number of arguments passed.
$n = scalar(@_);
$sum = 0;
foreach $item (@_){
# foreach is like for loop... It will access every
# array element by an iterator
$sum += $item;
}
$average = $sum / $n;
print "Average for the given numbers: $average\n";
}
Average(10, 20, 30);
আপনি যদি উপরের কোডটি পর্যবেক্ষণ করেন তবে foreach $item(@_)
লাইনটি দেখুন ... এখানে এটি ইনপুট প্যারামিটারটি পাস করে।
use strict
। আমি আপনার উপ ফাংশন সম্পাদনা করেছি তাই।
কখনও কখনও @_ পরিবর্তনশীল এডিট করার চেষ্টা করবেন না !!!! এগুলি অবশ্যই স্পর্শ করা উচিত নয় .. বা আপনি কিছুটা সন্দেহজনক প্রভাব পান। উদাহরণ স্বরূপ...
my $size=1234;
sub sub1{
$_[0]=500;
}
sub1 $size;
কল সাব 1 Before আকারের আগে 1234 থাকতে পারে 500 তবে 500 (!!) এর পরে আপনি এই মানটি সম্পাদনা করবেন না !!! আপনি দুটি বা ততোধিক মান পাস করতে পারেন এবং সাবরোটিনে সেগুলি পরিবর্তন করতে পারেন এবং সেগুলি সবই বদলে যাবে! আমি এই প্রভাব বর্ণিত কখনও দেখিনি। আমি যে প্রোগ্রামগুলি দেখেছি সেগুলিতে @_ অ্যারে কেবল পঠন ছাড়ুন। এবং কেবলমাত্র আপনি নিরাপদে ভেরিয়েবলটি পাস করতে পারবেন কোনও অভ্যন্তরীণ সাবরোটিন পরিবর্তিত হয়নি আপনাকে সর্বদা এটি করতে হবে:
sub sub2{
my @m=@_;
....
}
স্থানীয় সাববুটিন প্রক্রিয়া ভেরিয়েবলগুলিকে @_ বরাদ্দ করুন এবং এরপরে তাদের সাথে কাজ করুন। এছাড়াও কিছু গভীর পুনরাবৃত্তির অ্যালগরিদমগুলিতে যা পুনরায় ফিরে আসে আপনি স্থানীয় যুদ্ধগুলির জন্য ব্যবহৃত স্মৃতিশক্তি হ্রাস করতে এই পদ্ধতির ব্যবহার করতে পারেন। @_ অ্যারে একই হলে ফেরত দেয়।