2016-09-21 9 views
8

एक पर्ल सबराउटिन के लिए, यदि 0 तर्क गुजर रहा है, तो मैं इसे कॉल करने के लिए 4 रूपों का उपयोग कर सकता हूं। लेकिन 1 या अधिक तर्क गुजर, वहाँ एक रूप है कि मैं का उपयोग नहीं कर रहा है, कृपया नीचे देखें:सिंटैक्स `और नाम arg1 arg2 क्यों ... 'पर्ल सबराउटिन को कॉल करने के लिए उपयोग नहीं किया जा सकता है?

sub name 
{ 
    print "hello\n"; 
} 
# 4 forms to call 
name; 
&name; 
name(); 
&name(); 

sub aname 
{ 
     print "@_\n"; 
} 
aname "arg1", "arg2"; 
#&aname "arg1", "arg2"; # syntax error 
aname("arg1", "arg2"); 
&aname("arg1", "arg2"); 

त्रुटि आउटपुट है

String found where operator expected at tmp1.pl line 16, near "&aname "arg1"" 
    (Missing operator before "arg1"?) 
syntax error at tmp1.pl line 16, near "&aname "arg1"" 
Execution of tmp1.pl aborted due to compilation errors. 

किसी संकलक से त्रुटि उत्पादन व्याख्या कर सकते हैं दृष्टिकोण? मुझे समझ में नहीं आता क्यों यह गायब ऑपरेटर के बारे में शिकायत करता है।

धन्यवाद

+3

आपको एक अच्छा जवाब मिला। इसके लिए '&' के उपयोग के बारे में बहुत अधिक चर्चा के लिए ['यह पोस्ट'] देखें (http://stackoverflow.com/questions/1347396/when-should-i-use-the-to-call-a- perl-subroutine), और ['यह पोस्ट'] (http://stackoverflow.com/questions/8912049/difference-between-function-and-function-in-perl), और [' यह पोस्ट'] (http: //stackoverflow.com/questions/6706882/using-ampersands-and-parens-when-calling-a-perl-sub) ... और शायद अन्य लोग हैं। – zdim

+1

@zdim बस सोच रहा है, आपने लिंक मार्कअप में लिंक क्यों लगाए? – simbabque

+0

@simbabque हा, अच्छा बिंदु। मुझे लगता है कि वे अधिक दिखाई दे रहे हैं, हाइलाइट। वास्तव में नहीं जानते। वास्तव में इसके बारे में कभी भी "कोड मार्कअप" के रूप में नहीं सोचा (आप सही हैं, यह है) - लेकिन हाइलाइट के रूप में अधिक। – zdim

उत्तर

13

यह perlsub में दर्ज है:

सबरूटीन्स कॉल करने के लिए:

 NAME(LIST); # & is optional with parentheses. 
     NAME LIST;  # Parentheses optional if predeclared/imported. 
     &NAME(LIST); # Circumvent prototypes. 
     &NAME;   # Makes current @_ visible to called subroutine. 
&NAME "arg" साथ

, पर्ल &NAME() "ARG" देखता है, तो यह सोचता है कि वहाँ एक ऑपरेटर उप के बीच लापता है कॉल और "एआरजी"।

पर्ल 5 में, आपको अधिकांश मामलों में & की आवश्यकता नहीं है।

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

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