2012-08-13 18 views
17

मैं नीचे की तरह एक सरणी तर्क पारित करके पर्लपर्ल उप में सरणी पास करते समय "बहुत अधिक तर्क"?

sub create_hash() 
{ 
my @files = @_; 

     foreach(@files){ 
     if(/.text/) 
     { 

     open($files_list{$_},">>$_") || die("This file will not open!"); 

     } 
     } 

} 

मैं इस समारोह बोल रहा हूँ में नीचे एक समारोह है:

create_hash(@files2); 

सरणी उस में 38 के आसपास मूल्यों मिल गया है। लेकिन मैं हो रही है संकलन त्रुटियों:

Too many arguments for main::create_hash at .... 

क्या गलत है कि मैं यहाँ कर रहा हूँ?

मेरी पर्ल संस्करण है:

This is perl, v5.8.4 built for i86pc-solaris-64int 
(with 36 registered patches, see perl -V for more detail) 
+9

'()' उतार? (जैसा कि 'sub create_hash {..}') –

+0

यदि आप अपने फ़ंक्शन को कॉल करते हैं तो क्या होता है: create_hash (files2); (बिना "@" चिह्न के) – Arfeen

+0

@ pst अगर मैं उन्हें हटा देता हूं तो त्रुटि है: Array पाया जाता है जहां ऑपरेटर पर प्रक्रिया की उम्मीद है। लाइन (क्या आपको create_hash पूर्व निर्धारित करने की आवश्यकता है?) प्रक्रिया में वाक्यविन्यास त्रुटि .pl लाइन 71, "create_hash @ files2" के पास – Vijay

उत्तर

53

आपकी समस्या यहीं है:

sub create_hash() 
{ 

() एक prototype है। इस मामले में, यह इंगित करता है कि create_hash कोई पैरामीटर नहीं लेता है। जब आप इसे पास करने का प्रयास करते हैं, तो पर्ल शिकायत करता है।

ऐसा लगता है कि

sub create_hash 
{ 

सामान्य तौर पर, you should not use prototypes with Perl functions दिखना चाहिए। वे अन्य भाषाओं में प्रोटोटाइप की तरह नहीं हैं। वे उपयोग करते हैं, लेकिन यह पर्ल में एक काफी उन्नत विषय है।

+2

भगवान आशीर्वाद। मेरा सिर तोड़ रहा था :) – N3Xg3N

-3

के रूप में सरणी संदर्भ का उपयोग कर सकते हैं:

sub create_hash { 
    my ($files) = @_; 
    foreach(@{$files)){ 
     ... 
    } 
} 

create_hash(\@files2); 
+0

एक * * सरणी-रेफ का उपयोग कर सकता है, लेकिन यह अभी भी 'sub create_hash() {rest_of_that_code} '.. –

+0

@pst:" sub create_hash() {"," उप create_hash {" – cdtits

+2

@cdtits, जबकि आपका समाधान काम करता है, आप यह समझाने में नाकाम रहे कि क्यों पीटर का कोड पहले स्थान पर काम नहीं करता था। – cjm

संबंधित मुद्दे