perl - अपरिभाषित उप-रूटिनों मैं कैसे धूम्रपान कर सकता हूं?




subroutine (2)

मैं अपरिभाषित सबरूटीन के सभी उदाहरणों की पहचान करने के लिए एक कोड बेस स्कैन करना चाहता हूं जो वर्तमान में उपलब्ध नहीं हैं।

उदहारण के लिए:

use strict;
use warnings;

my $flag = 0;
if ( $flag ) {
  undefined_sub();
}

टिप्पणियों

  • जब $flag सही मानता है, तो निम्न चेतावनी का उत्सर्जन होता है:

    Undefined subroutine &main::undefined_sub called at - line 6

    मैं अपरिभाषित उप-रूटिनों की पहचान करने के लिए रन-टाइम पर जारी चेतावनियों पर भरोसा करना नहीं चाहता हूं

  • strict और warnings प्रैग्स यहां मदद नहीं करते हैं use strict 'subs' का कोई प्रभाव नहीं है I

  • यहां तक ​​कि निम्न कोड स्निपेट चुप है

    $ perl -Mstrict -we 'exit 0; undefined_sub()'

आप जो पूछ रहे हैं वह कम से कम कुछ असंभव है निम्न कोड स्निपेट पर विचार करें:

( rand()<0.5 ? *foo : *bar } = sub { say "Hello World!" };

foo();

एक 50% मौका है कि यह ठीक चला जाएगा, और एक 50% मौका है कि यह एक "अपरिभाषित उपनेमका" त्रुटि देगा। फैसला रनटाइम पर किया जाता है, इसलिए इससे पहले यह बताना संभव नहीं है कि यह क्या होगा। यह निश्चित रूप से एक बिंदु का प्रदर्शन करने के लिए एक अनुवांशिक मामला है, लेकिन उप-मौकों का क्रम (या संकलन-समय) पीढ़ी वास्तविक कोड में असामान्य नहीं है। उदाहरण के लिए, देखें कि कैसे Moose तरीके जोड़ते हैं। स्थिर स्रोत कोड विश्लेषण कभी भी इस तरह के कोड का विश्लेषण करने में सक्षम नहीं होगा।

B::Lint शायद कुछ पूर्व-रनटाइम के रूप में अच्छा हो सकता है


शायद सबरुउटिन्स :: पर्लाइट कॉल्स से प्रतिबंधित नीतियां पर्ल से :: आलोचक मदद कर सकते हैं

यह नीति यह जांचती है कि प्रत्येक अयोग्य सफ़ाउटिन कॉल की वर्तमान फाइल में एक मिलान सबरेटाइन घोषणा है, या यह शामिल किए गए मॉड्यूल में से किसी एक के लिए आयात सूची में स्पष्ट रूप से प्रकट होता है।

यह "नीति" पर्ल का एक हिस्सा है :: आलोचक :: सख्त एसबस , जिसे स्थापित करने की आवश्यकता है। वहाँ कुछ और नीतियां हैं यह गंभीरता 4 उल्लंघन माना जाता है, इसलिए आप ऐसा कर सकते हैं

perlcritic -4 script.pl

और neither declared nor explicitly imported , या उपयोग के लिए आउटपुट को पार्स करता है

perlcritic -4 --single-policy ProhibitCallsToUndeclaredSubs script.pl

कुछ वैध उपयोग अभी भी ध्वजांकित हैं, क्योंकि इसके लिए सभी subs को स्पष्ट रूप से आयात किया जाना आवश्यक है

यह एक स्थिर विश्लेषक है, जो मुझे लगता है कि आपके उद्देश्य को फिट होना चाहिए।







subroutine