2016-05-12 5 views
13

यह सवाल बेवकूफ हो सकता है। लेकिन मैंने अभी पर्ल की खोज शुरू कर दी है। मैं पर्ल v5.16.2 का उपयोग कर रहा हूँ। मुझे पता है किकथन 5.10 में पेश किया गया है।कहें फ़ंक्शन का उपयोग करते समय मुझे उपयोग कथन क्यों निर्दिष्ट करना चाहिए?

#!/usr/bin/perl 

say "Hello World!"; 

जब मैं कार्यक्रम से ऊपर चलाने का प्रयास, मैं निम्न त्रुटि हो रही है:

$ ./helloPerl 
String found where operator expected at ./helloPerl line 3, near "say "Hello World!"" 
    (Do you need to predeclare say?) 
syntax error at ./helloPerl line 3, near "say "Hello World!"" 
Execution of ./helloPerl aborted due to compilation errors. 

लेकिन जब मैं बयान use 5.016; कहा, यह मेरे लिए सही उत्पादन दे रहा है।

#!/usr/bin/perl 

use 5.016; 
say "Hello World!"; 

मेरे संदेह नहीं है, मैं पर्ल v5.16.2, जो 5.010 से ऊपर है उपयोग कर रहा हूँ। मुझे use कथन का उपयोग करके पर्ल संस्करण का उल्लेख क्यों करना चाहिए?

उत्तर

17

विशेषताएं जो पिछली संगतता को तोड़ सकती हैं, डिफ़ॉल्ट रूप से सक्षम नहीं हैं।

perldoc feature देखें:

It is usually impossible to add new syntax to Perl without breaking some existing programs. This pragma provides a way to minimize that risk. New syntactic constructs, or new semantic meanings to older constructs, can be enabled by use feature 'foo' , and will be parsed only when the appropriate feature pragma is in scope. (Nevertheless, the CORE:: prefix provides access to all Perl keywords, regardless of this pragma.)

एक संस्करण संख्या पर use, परोक्ष सभी सुविधाओं के लिए सक्षम बनाता है, क्योंकि यह भी पर्ल संस्करण पर एक बाधा लागू होता है। तो उदाहरण के लिए, आपको say लागू नहीं किया जाएगा, उदाहरण के लिए।

+1

मैं कहना है कि कुछ विशेषताएं है कि वाक्यविन्यास त्रुटियों पहले से थे सक्षम करने के लिए एक 'use' बयान की जरूरत नहीं हो सकता है चाहते हैं। –

+1

मैं इसे 'एस/पैटर्न/न्यूपर्टर्न/आर' और '$ var // 0' प्रकार की चीजों की तरह लेता हूं? हाँ, यह सही है। वे पीछे की संगतता तोड़ने वाले नहीं हैं। आप अभी भी 'उपयोग' के माध्यम से न्यूनतम पीएलएल संस्करण लागू कर सकते हैं (और शायद यदि आप ऐसा कुछ कर रहे हैं जो संस्करण निर्भर है) – Sobrique

14

sayसुविधा है, यह नियमित रूप से perl वाक्यविन्यास नहीं है (अभी तक - यह कभी भी होगा?)

उपयोग या तो

use feature qw(say); 

या

use v5.010; # or any version later 
+5

मुझे नहीं लगता कि यह कभी भी होगा, क्योंकि यह पिछली संगतता और डिज़ाइन प्रश्न है। ऐतिहासिक रूप से, perl ने पहले 'अच्छा' कोड को अमान्य नहीं किया है, यही कारण है कि उदा। वास्तव में अच्छा विचार होने के बावजूद 'सख्त' और 'चेतावनियां' वैकल्पिक हैं। – Sobrique

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