পার্লে @_ এর অর্থ কী?


উত্তর:


119

পার্লডোক পার্লভার কোনও বিশেষ-নামযুক্ত পার্ল ভেরিয়েবল তথ্য পরীক্ষা করার জন্য প্রথম স্থান।

উদ্ধৃতি:

@_: একটি সাব্রোটিনের মধ্যে অ্যারেতে @_সেই সাব্রুটিনে পাস হওয়া প্যারামিটার থাকে।

পারেলভার থেকে লিঙ্কযুক্ত পার্লডোক পার্লসব (পার্ল সাবরুটাইনস) এ আরও বিশদ পাওয়া যাবে :

অ্যারে দেখানোর ক্ষেত্রে যে কোনও যুক্তি পাস হয়েছে @_

অতএব, আপনি যদি দুই আর্গুমেন্ট সহ একটি ফাংশন বলা হয়, ঐ সংরক্ষণ করা হবে $_[0]এবং $_[1]

অ্যারেটি @_একটি স্থানীয় অ্যারে , তবে এর উপাদানগুলি আসল স্কেলার পরামিতিগুলির জন্য উপকরণ । বিশেষত, যদি একটি এলিমেন্ট $ _ [0] আপডেট হয় তবে সংশ্লিষ্ট আর্গুমেন্টটি আপডেট হয় (বা এটি আপডেটযোগ্য না হলে একটি ত্রুটি ঘটে)।

যদি একটি আর্গুমেন্ট একটি অ্যারে বা হ্যাশ উপাদান থাকে যা ফাংশন বলা হওয়ার আগে উপস্থিত ছিল না, সেই উপাদানটি তখনই তৈরি করা হয় যখন (এবং যদি) এটি সংশোধন করা হয় বা এর কোনও রেফারেন্স নেওয়া হয়। (পার্লের পূর্ববর্তী কয়েকটি সংস্করণ উপাদানটিকে নির্ধারিত ছিল কি না সে উপাদানটি তৈরি করেছিল)) সম্পূর্ণ অ্যারেতে নিয়োগ দেওয়া @__ al যে এলিয়াসিং সরিয়ে দেয় এবং কোনও যুক্তি আপডেট করে না।


ধন্যবাদ, আমি সম্প্রতি পেরেলডোক চেক করতে নিজেকে অভ্যস্ত করেছি এবং আমি ওয়েবপৃষ্ঠাগুলি দরকারী বলে খুঁজে পেয়েছি: পার্লডক.পেরল.আর.এলপি / হার্ভি.টি.এম.এল এটি পার্ল স্টাব তৈরি করা খারাপ ছিল না যা ওয়েবে এটি চালু করে ... একটি ওয়েবপৃষ্ঠার বিন্যাস আমাকে অনেক সাহায্য করে।
aschultz

27

সাধারণত, আপনি ভেরিয়েবলটি ব্যবহার করে একটি সাবকে দেওয়া প্যারামিটারগুলি প্রসারিত করুন @_:

sub test{
  my ($a, $b, $c) = @_;
  ...
}

# call the test sub with the parameters
test('alice', 'bob', 'charlie');

পেরিকক্রিটিক দ্বারা সঠিকভাবে দাবি করা হয়েছে ।


4
এই সময়টির সাথে আমি একমত নই perlcritic, ব্যক্তিগতভাবে আমি মনে করি যে এটি কোনও ফাংশনের জন্য সবচেয়ে ভাল তবে কোনও পদ্ধতির জন্য shiftএটি স্ব-রেফারেন্সে কার্যকর, তারপরে @_অ্যারেটি আনপ্যাক করুন । এটি পরিষ্কার করে দেয় যে এটি একটি পদ্ধতি এবং পদ্ধতিটি কিছু নির্দিষ্ট পরামিতি নেয়
জোয়েল বার্গার

পার্লক্রিটিক সম্পর্কে আমার সম্ভবত আগে / ব্যবহার করা উচিত ছিল, তবে আমি তা করি নি। এই উদাহরণে এটি ব্যবহার করার জন্য ধন্যবাদ। কখনও কখনও আপনার কাছে রেফারেন্স হিসাবে ব্যবহৃত জিনিসগুলি কাউকে তাদের কাছে সম্পূর্ণ নতুন কিছু শিখতে সহায়তা করে।
aschultz

12

একটি প্রথম হিট জন্য সার্চperl @_ বলছেন এই :

@_ হ'ল একটি সাব থেকে আগত পরামিতিগুলির তালিকা।

এটির এর আরও দীর্ঘ এবং আরও বিশদ বিবরণ রয়েছে।


4
আসলে আপনার গুগল অনুসন্ধানের প্রথম হিট এখন এই খুব পৃষ্ঠায় লিঙ্ক করেছে।
গ্যাব্রিয়েল

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

4
সত্য এটি বহু বছর পরে, তবে এখনও উত্তরটি পড়ার জন্য এটি বিরক্তিকর যা বোঝায় যে প্রশ্নের উত্তর দেওয়ার জন্য আপনাকে গুগল করা উচিত। গুগলিংয়ের ফলে উত্তর পড়া কারও পক্ষে এটি অর্থহীন তথ্য।
গ্যাব্রিয়েল

4
হ্যাঁ অনুসন্ধান করা সঠিক প্রথম পদক্ষেপ, তবে আপনার উত্তরে অনুসন্ধানের জন্য নির্দেশাবলী অন্তর্ভুক্ত করার দরকার নেই। এটি অপ্রয়োজনীয় তথ্য যা কোনও মূল্য দেয় না এবং এটি ব্যঙ্গাত্মক কারণ কেউ যদি আপনার উত্তরের সন্ধান লিঙ্কটি অনুসরণ করে তবে এটি তাদের শুরু করে যেখানে তারা শুরু করেছিল they
গ্যাব্রিয়েল

4
এই সমস্ত "গুগল এটি" উত্তরগুলি এত খারাপভাবে বয়ে গেছে 😂
অস্টিন অ্যাডামস

11

প্রশ্নটি ছিল পার্লের @_ অর্থ কী । যে প্রশ্নের উত্তর যে যতটুকু হয় $_মানে এটা পার্ল এ, @_একভাবে মানে তারা

কেউ এই সমালোচনামূলক দৃষ্টিভঙ্গি উল্লেখ করেছি বলে মনে হয় তার পাশাপাশি - অর্থ তাহাদেরই

ফলস্বরূপ এগুলি উভয় সর্বনাম হিসাবে বা কখনও কখনও টোপিকালাইজার হিসাবে ব্যবহৃত হয়।

এগুলির সাধারণত নামকরণ পূর্বসূরি থাকে, যদিও সবসময় না।


7

আপনি বেশিরভাগ ক্ষেত্রে স্বতন্ত্র ভেরিয়েবলের জন্য শিফটও ব্যবহার করতে পারেন:

$var1 = shift;

এটি এমন একটি বিষয় যেখানে আপনার আরও গবেষণা করা উচিত কারণ পার্লের আপনার সাব রুটিনের ভিতরে বাইরের তথ্য অ্যাক্সেস করার বিভিন্ন আকর্ষণীয় উপায় রয়েছে।


4
দুর্দান্ত, যে কেউ আমাকে অনুরূপ কাজ করার জন্য অন্যভাবে পোস্ট করার জন্য ডাউন ভোট দেয়। আমি বুঝতে পেরেছি যে আমি সরাসরি প্রশ্নের উত্তর দেয়নি কারণ কেউ ইতিমধ্যে করেছে, তবে আমি একটি বিকল্প ফর্মটি অফার করেছিলাম যে নতুন পার্ল প্রোগ্রামাররা প্রায়শই বিভ্রান্ত হন।
hockfan86


2

এছাড়াও যদি কোনও ফাংশন একটি অ্যারে প্রদান করে তবে ফাংশনটি তার পরিবর্তিত ডেটা নীচের মতো কোনও ভেরিয়েবলের জন্য বরাদ্দ না করে কল করা হয়। এখানে বিভক্ত () বলা হয়, তবে এটি কোনও ভেরিয়েবলের জন্য বরাদ্দ করা হয় না। আমরা @_ এর মাধ্যমে পরে এর ফিরিয়ে নেওয়া ডেটা অ্যাক্সেস করতে পারি

$str = "Mr.Bond|Chewbaaka|Spider-Man";
split(/\|/, $str);

print @_[0]; # 'Mr.Bond'

এটি স্ট্রিংকে বিভক্ত করবে $strএবং অ্যারে সেট করবে @_


1

@ একটি অ্যারের জন্য ব্যবহৃত হয়।

সাব্রোটিনে বা আপনি যখন পার্লে কোনও ফাংশন কল করেন, আপনি প্যারামিটার তালিকাটি পাস করতে পারেন। সেক্ষেত্রে, @_ফাংশনে প্যারামিটার তালিকা পাস ব্যবহার করা যেতে পারে হয়:

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। আমি আপনার উপ ফাংশন সম্পাদনা করেছি তাই।
EverythingRightPlace

0

কখনও কখনও @_ পরিবর্তনশীল এডিট করার চেষ্টা করবেন না !!!! এগুলি অবশ্যই স্পর্শ করা উচিত নয় .. বা আপনি কিছুটা সন্দেহজনক প্রভাব পান। উদাহরণ স্বরূপ...

my $size=1234;
sub sub1{
  $_[0]=500;
}
sub1 $size;

কল সাব 1 Before আকারের আগে 1234 থাকতে পারে 500 তবে 500 (!!) এর পরে আপনি এই মানটি সম্পাদনা করবেন না !!! আপনি দুটি বা ততোধিক মান পাস করতে পারেন এবং সাবরোটিনে সেগুলি পরিবর্তন করতে পারেন এবং সেগুলি সবই বদলে যাবে! আমি এই প্রভাব বর্ণিত কখনও দেখিনি। আমি যে প্রোগ্রামগুলি দেখেছি সেগুলিতে @_ অ্যারে কেবল পঠন ছাড়ুন। এবং কেবলমাত্র আপনি নিরাপদে ভেরিয়েবলটি পাস করতে পারবেন কোনও অভ্যন্তরীণ সাবরোটিন পরিবর্তিত হয়নি আপনাকে সর্বদা এটি করতে হবে:

sub sub2{
  my @m=@_;
  ....
}

স্থানীয় সাববুটিন প্রক্রিয়া ভেরিয়েবলগুলিকে @_ বরাদ্দ করুন এবং এরপরে তাদের সাথে কাজ করুন। এছাড়াও কিছু গভীর পুনরাবৃত্তির অ্যালগরিদমগুলিতে যা পুনরায় ফিরে আসে আপনি স্থানীয় যুদ্ধগুলির জন্য ব্যবহৃত স্মৃতিশক্তি হ্রাস করতে এই পদ্ধতির ব্যবহার করতে পারেন। @_ অ্যারে একই হলে ফেরত দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.