आप अक्सर परिभाषितता के लिए चेक देखते हैं ताकि आपको एक अपरिभाषित मान का उपयोग करने के लिए चेतावनी से निपटना न पड़े (और पर्ल 5.10 में यह आपको आक्रामक चर बताता है):
Use of uninitialized value $name in ...
इसलिए, इस चेतावनी को प्राप्त करने के लिए, लोग सभी प्रकार के कोड के साथ आते हैं, और यह कोड बबल गम और डक्ट टेप के बजाय समाधान के एक महत्वपूर्ण हिस्से की तरह दिखाई देने लगता है। कभी-कभी, यह दिखाने के लिए बेहतर है कि आप उस चेतावनी को स्पष्ट रूप से बंद कर रहे हैं जिसे आप बचने की कोशिश कर रहे हैं:
{
no warnings 'uninitialized';
if( length $name ) {
...
}
}
अन्य मामलों में, डेटा के बजाय किसी प्रकार के शून्य मान का उपयोग करें। साथ Perl 5.10 परिभाषित या ऑपरेटर , आप दे सकते हैं lengthचर कि चेतावनी ट्रिगर किया जाएगा के बजाय एक स्पष्ट रिक्त स्ट्रिंग (परिभाषित है, और वापस शून्य लम्बाई देना):
use 5.010;
if( length( $name // '' ) ) {
...
}
पर्ल 5.12 में, यह थोड़ा आसान है क्योंकि lengthअपरिभाषित मूल्य पर भी अपरिभाषित रिटर्न होता है । यह थोड़ा खिन्नता जैसा लग सकता है, लेकिन यह उस गणितज्ञ को प्रसन्न करता है जो मैं चाहता था। यह चेतावनी जारी नहीं करता है, यही कारण है कि यह सवाल मौजूद है।
use 5.012;
use warnings;
my $name;
if( length $name ) {
...
}
length undefचेतावनी के बजाय अनिर्धारित रिटर्न देता है, और 0. रिटर्न बूलियन संदर्भ में, अपराजित केवल 0 के रूप में गलत है, इसलिए यदि आप v5.12 या बाद में लक्षित कर रहे हैं, तो आप बस लिख सकते हैंif (length $name) { ... }