2012-02-29 6 views
14

मुझे यह त्रुटि मिल रही है भले ही मैंने अपना रेगेक्स वैरिएबल घोषित किया हो।पैटर्न मिलान में अनियमित मूल्य का उपयोग (एम //)

my $pattern = '(Cat\.\sNo\.\s\d+)';

मेरी कोड में बाद में मैं तो का उपयोग $pattern

if ($page =~ /$pattern/) 
{ 
    push(@array, $element); 
} 

लेकिन जब मैं अपने कोड चलाने यह मुझे नीचे त्रुटि देता है, और सफलतापूर्वक चलाने के लिए जारी है:

Use of uninitialized value in pattern match (m//) 

इस त्रुटि के लिए गूगल पर एक खोज जहां चर नहीं है परिदृश्यों को इंगित करने लगता है शुरू किया गया है, हालांकि मेरे मामले में ऐसा लगता है कि मैंने इसे पहले ही शुरू कर दिया है?

+0

आप हमें और अधिक कोड दिखाने सकते हैं? '$ पृष्ठ' और' $ तत्व' कहां परिभाषित हैं? मुझे एक चरणीय दायरा समस्या पर संदेह है। – Toto

उत्तर

19

वह संदेश आपको नहीं बता रहा है कि $pattern अनियमित है; यह आपको बता रहा है कि $page अनियमित है। आप उम्मीद कर रहे हैं कि $page अप्रारंभीकृत किया जा सकता है, और कहा कि ठीक है, तो आप चेतावनी बायपास कर सकते हैं और चीजों को स्रोत-कोड के भविष्य के पाठकों के लिए स्पष्ट कर दूं इस लिख कर:

if (defined($page) && ($page =~ /$pattern/)) 
+0

ठीक है मैंने मूल प्रश्न में कोड अपडेट किया है .. इसलिए इस मामले में '' $ पृष्ठ' और '$ element' दोनों को पहले 'मेरे $ पृष्ठ' और' मेरा $ तत्व 'के साथ प्रारंभ किया गया है। फिर भी मुझे अभी भी अनियंत्रित त्रुटि मिलती है? – kurotsuki

+0

बस एक और नोट, मैंने डिफ़ॉल्ट रिक्त मानों के साथ $ पृष्ठ और $ तत्व शुरू किया, यानी – kurotsuki

+1

'मेरा $ पृष्ठ' * * $ पृष्ठ' प्रारंभ नहीं करता है, यह केवल * घोषित करता है *। 'मेरा $ पृष्ठ;' 'मेरे $ पृष्ठ = undef; 'के समतुल्य है, और' 'मेरे $ पृष्ठ =' 'के बराबर * नहीं है;'। आपके 'if' कथन से ठीक पहले, यदि आप कथन 'if (परिभाषित $ पृष्ठ) {प्रिंट" \ $ पृष्ठ प्रारंभ किया गया है \ n "; } else {print "\ $ पृष्ठ अनियमित \ n"; } ', यह क्या प्रिंट करता है? – ruakh

1

समस्या 'isn टी $pattern - समस्या $element

एक त्वरित परीक्षण एक ही परिणाम का उत्पादन करेगा है:

use strict; 
use warnings; 

my $pattern = '(Cat\.\sNo\.\s\d+)'; 
my $element =~ /$pattern/; 
संबंधित मुद्दे