2008-10-21 10 views
15

क्या पर्ल स्क्रिप्ट शुरू करने के लिए नीचे दिए गए दो उदाहरणों के बीच कोई अंतर है? यदि हां, तो मैं दूसरे पर एक का उपयोग कब करूंगा?क्या मुझे कमांड लाइन स्विच या प्रोगमा के साथ पर्ल चेतावनियां चालू करनी चाहिए?

उदाहरण 1:

#!/usr/bin/perl 

use warnings; 

उदाहरण 2:

#!/usr/bin/perl -w 

उत्तर

31

स्विच का उपयोग करते हुए अपने कार्यक्रम के द्वारा उपयोग किए गए सभी मॉड्यूल में सभी चेतावनियों सक्षम हो जाएगा। प्रज्ञा का प्रयोग करके आप इसे केवल उस विशिष्ट मॉड्यूल (या स्क्रिप्ट) में सक्षम करते हैं। आदर्श रूप में, आप अपने सभी मॉड्यूल में चेतावनियों का उपयोग करते हैं, लेकिन अक्सर यह मामला नहीं है। जब आप किसी तृतीय पक्ष मॉड्यूल का उपयोग करते हैं तो स्विच का उपयोग करके आपको बहुत सारी चेतावनियां मिल सकती हैं जो चेतावनियां-सुरक्षित नहीं है।

तो, आदर्श रूप से इससे कोई फर्क नहीं पड़ता, लेकिन व्यावहारिक रूप से यह आपके अंत उपयोगकर्ताओं के लिए स्विच का उपयोग न करने के लिए अक्सर बेहतर होता है लेकिन प्रज्ञा।

17

-w कमांड लाइन स्विच पूरे दुभाषिया के लिए विश्व स्तर पर चेतावनियों को चालू करता है। दूसरी तरफ, use warnings एक "लेक्सिकल प्रोगमा" है और केवल उस अक्षीय क्षेत्र में लागू होता है जिसमें इसका उपयोग किया जाता है। आमतौर पर, आप इसे फ़ाइल के शीर्ष पर रखते हैं, इसलिए यह पूरी फ़ाइल पर लागू होता है, लेकिन आप इसे विशेष ब्लॉक पर भी दायरा कर सकते हैं। इसके अतिरिक्त, आप no warnings का उपयोग अस्थायी रूप से उन्हें ब्लॉक के अंदर बंद करने के लिए कर सकते हैं, ऐसे मामलों में जहां आपको अन्यथा चेतावनी-उत्पन्न व्यवहार करने की आवश्यकता है। यदि आप -w पर हैं तो आप ऐसा नहीं कर सकते हैं।

व्याख्यात्मक चेतावनियां कैसे काम करती हैं, इसके बारे में विवरण के लिए, उनके विभिन्न उप-समूह को चालू और बंद करने के तरीके सहित, perllexwarn दस्तावेज़ देखें।

+2

पर "कोई चेतावनी" आपका बिंदु मेरी अपेक्षा है, लेकिन एक त्वरित परीक्षण (perl -w -e "कोई चेतावनी नहीं; प्रिंट $ a;") ने दिखाया कि, कम से कम मेरे perl पर, "कोई चेतावनी" अभी भी काम नहीं करता है। –

10

"-w" पुराना है और चेतावनी चालू करने का एकमात्र तरीका होता है (वास्तव में "-w" केवल वैश्विक $^डब्ल्यू चर सक्षम बनाता है)। "चेतावनियों का प्रयोग करें;" अब बेहतर है (संस्करण 5.6.0 और बाद में) क्योंकि (जैसा कि पहले से ही उल्लेख किया गया है) के पास वैश्विक दायरे के बजाय एक व्याख्यात्मक है, और आप विशिष्ट चेतावनियों को चालू/बंद कर सकते हैं। और "सख्त उपयोग" के साथ भी शुरू करना न भूलें :-)

+0

5.6.0 के रूप में। और अगर आपको अभी भी 5.5 की परवाह है तो मदद करने के लिए चेतावनियां :: compat है। – Schwern

+0

फिक्स्ड। मुझे पता था कि मुझे कंधे ने अभी कहा "5.6" :-) – runrig

+0

लेकिन फिर भी कोई भी 5.6.0 का उपयोग क्यों करना चाहेगा? :-) – runrig

-6

दोनों करो! हमेशा!

+0

आप इसे क्यों वोट दे रहे हैं? – JDrago

5

ध्यान देने योग्य मूल्य का एक और भेद यह है कि "चेतावनियों का उपयोग" प्रगति आपको सक्षम करने के लिए विशिष्ट चेतावनियों का चयन करने देता है (और इसी प्रकार, "कोई चेतावनी नहीं" आपको अक्षम करने के लिए चेतावनियों का चयन करने की अनुमति देती है)।

1

सक्षम/pragma का उपयोग कर विशिष्ट दावे को निष्क्रिय करने के अलावा, आप भी कुछ या सभी चेतावनियों त्रुटियों के लिए बढ़ावा देने के कर सकते हैं:

use strict; 
use warnings FATAL => 'all', NONFATAL => 'exec'; 
+2

विकास के दौरान यह एक अच्छा विचार है, लेकिन यह तैनाती में इतना अच्छा विचार नहीं हो सकता है। –

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