में अनियमित मूल्य मुझे मेरी पर्ल स्क्रिप्ट्स में से एक को चलाने की चेतावनी मिल रही है। त्रुटि को एक साधारण if
कथन पर फेंक दिया जा रहा है जहां मैं परीक्षण कर रहा हूं यदि सरणी में एक स्ट्रिंग किसी अन्य स्ट्रिंग के बराबर है।स्ट्रिंग 'ईक' पर्ल
मेरे सहकर्मी और मैंने कई परिदृश्यों की कोशिश की है और अभी भी चेतावनियों को हल करने में सक्षम नहीं हैं। मैंने अपने सभी शोध को इस धागे में अब तक रखने की कोशिश की है, इसलिए यह थोड़ा लंबा है, लेकिन कृपया इसके साथ चिपके रहें। मैं पूरी तरह से अटक गया हूं और आशा करता हूं कि स्टैक ओवरफ्लो के महान दिमाग में से एक मेरी मदद कर सकता है!
कोड समस्याओं को पैदा करने है:
if ($pieces[0] eq "PromotionNumber")
कि खंड के आसपास कोड के ब्लॉक है:
my @pieces = split(/=/, $var);
if($pieces[0] eq "PromotionNumber") {
$promoNumber = $pieces[1];
} elsif ($pieces[0] eq "Type") {
# More similar code follows
उपरोक्त कोड में मेरा लक्ष्य सभी चर मैंने पाया आवंटित करने के लिए है संबंधित पर्ल चर के लिए एक पाठ फ़ाइल में। मैं फिर उन पाए गए चर को SQL डेटाबेस में सम्मिलित करता हूं।
टेक्स्ट फ़ाइल में कई फ़ील्ड हैं जो अलग-अलग ऑर्डर में हो सकते हैं, यही कारण है कि मैं स्विच शैली को पूरा करने के लिए स्विच शैली if-elsif ... का उपयोग करता हूं। ऐसे कुछ क्षेत्र भी हैं जिन पर मुझे परवाह नहीं है, जैसे स्तर, और मैं इन क्षेत्रों को अनदेखा करता हूं। हालांकि ये क्षेत्र ऐसे क्षेत्र हैं जो चेतावनियां पैदा करते हैं।
$var
निम्नलिखित के लिए निर्धारित है के रूप में यह के माध्यम से लूप ...
PromotionNumber=000
RecordOffset=0
Code=0
SubCode=1
Level=0
जब मैं हिट "स्तर = 0", मैं PerlIDE.exe डीबगर में रोक सकते हैं और देखते हैं कि स्ट्रिंग विभाजित है सकते हैं स्तर और 0 में और सरणी में डाला गया। हालांकि, जैसे ही कोड if
कथन के लिए आगे बढ़ता है और $pieces[0] eq "PromotionNumber"
परीक्षण करता है मुझे चेतावनी मिलती है।
मैं if
कथन से ठीक पहले $ 0 [$] प्रिंट भी कर सकता हूं, और यह "स्तर" प्रिंट करेगा।
अगर मैं करने के लिए कोड बदलने निम्न चेतावनी चली जाती है ...
my @pieces = split(/=/, $var);
if($pieces[0] eq "Level") {
#My problematic variable test
}elsif($pieces[0] eq "PromotionNumber") {
$promoNumber = $pieces[1];
} elsif ($pieces[0] eq "Type") {
#More similar code follows
हालांकि, अगर मैं "स्तर" स्ट्रिंग दूसरे के लिए परीक्षण, चेतावनी वापस आता है। नीचे दिए गए कोड में चेतावनी है।
my @pieces = split(/=/, $var);
if($pieces[0] eq "PromotionNumber") {
#My problematic variable test
}elsif($pieces[0] eq "Level") {
$promoNumber = $pieces[1];
} elsif ($pieces[0] eq "Type") {
#More similar code follows
पर्ल देखभाल किस आदेश में मैं परीक्षण करता हूं? ध्यान दें, कि मैं अलग-अलग तारों का परीक्षण कर रहा हूं जो मेरे इल्स-एलीफ कथन में एकाधिक एल्सिफ़ नीचे हैं जो इस चेतावनी को नहीं देते हैं।
कोई विचार? मुझे वास्तव में इस चेतावनी को साफ़ करने की आवश्यकता है ताकि चलते समय कंसोल बाढ़ न हो। हालांकि लिपि चेतावनियों के साथ काम कर रही है।
सटीक त्रुटि है: japdpmrijob.pl लाइन 250.
त्रुटि की सटीक लाइन (PerlIDE में पर्ल के डिबग उपयोगिता का उपयोग करके निर्धारित में स्ट्रिंग eq में अप्रारंभीकृत मूल्य की
का प्रयोग करें।exe) है:
if ($pieces[0] eq "PromotionNumber") {
मैं $ टुकड़े प्रिंट कर सकता हूं [0] और मूल्य देख सकता हूं। तो मुझे पता है कि यह मेरे मूल्य के साथ परिभाषित किया गया है। मैं $ टुकड़े भी प्रिंट कर सकता हूं [1] और मेरा अपेक्षित मूल्य देख सकता हूं। यदि मैं पहले $ [0] eq "स्तर" के लिए परीक्षण करता हूं, तो चेतावनी दूर हो जाती है और मैं दोनों चरों तक पहुंच सकता हूं।
मैं अभी भी उलझन में हूँ ...
ऐसा लगता है कि त्रुटि वास्तव में "eq" एक चर के रूप में चिह्नित किया जा रहा है। उस पर कोई विचार?
नीचे आपको कोड का एक बड़ा हिस्सा मिल जाएगा। मैंने पूरे
for
लूप और कई चर शामिल किए जिनमें मैं काम कर रहा हूं। If-elsif-else अनुक्रम के अंत मेंelse
कथन पर ध्यान दें, मैंने इसे तीसरे उत्तर द्वारा नोट किए गए चेतावनी को रोकने का प्रयास करने के लिए जोड़ा। यहelse
कथन चेतावनी कहलाता है हर बार मेरे अपेक्षित मूल्यों को प्रिंट करता है, इसलिए मुझे पता है कि मान मौजूद हैं।for my $cond (@conditions) { if($debug==1){print $cond."\n";} # Required database variables my $isRecord = 0; my $promoNumber; my $type; my $process; my $testValue; my $recordOffset; my $code; my $subcode; my $itemType; my $itemValue; # Function test variables my $itemTypeVar; my $newQualifier = 1; # Database Configuration my $dbApps = new Win32::ODBC("myDatabase") || die "Error: " . Win32::ODBC::Error(); my @condVars = split(/\|/, $cond); for my $var (@condVars) { if($debug==1){print $var."\n";} my @pieces = split(/=/, $var); if(defined($pieces[0])){ print "piece 0 defined!\n"; } else { print "pieces 0 not defined!\n"; } if(defined($pieces[1])){ print "piece 1 defined!\n"; } else { print "piece 1 not defined!\n"; } if($pieces[0] eq "PromotionNumber"){ $promoNumber = $pieces[1]; } elsif ($pieces[0] eq "Type"){ $type = $pieces[1]; } elsif ($pieces[0] eq "Process"){ $process = $pieces[1]; } elsif ($pieces[0] eq "TestValue"){ $testValue = $pieces[1]; } elsif ($pieces[0] eq "RecordOffset"){ $recordOffset = $pieces[1]; if ($recordOffset == 0) { $newQualifier = 1; } } elsif ($pieces[0] eq "Code"){ $code = $pieces[1]; } elsif ($pieces[0] eq "SubCode"){ $subcode = $pieces[1]; } elsif ($pieces[0] eq "ItemType"){ $itemType = $pieces[1]; if($itemType eq "0") { $itemTypeVar = "ItemCode"; } elsif($itemType eq "1") { $itemTypeVar = "ItemCode"; } elsif($itemType eq "2") { $itemTypeVar = "Department"; } elsif($itemType eq "5") { $itemTypeVar = "MixMatchCode"; } elsif($itemType eq "12") { $itemTypeVar = "GroupCode"; } } elsif ($pieces[0] eq $itemTypeVar){ $itemValue = $pieces[1]; } else { print "$pieces[0] and $pieces[1] not used.\n"; } print "$var\n"; } }
लगभग निश्चित रूप से समस्या '$ टुकड़े [1] 'अभिव्यक्ति है, न कि $ टुकड़े [0]'। यदि आपके पास '=' के बिना '$ var' का मान है (उदाहरण के लिए एक खाली रेखा) 'विभाजन' एक आइटम की एक सूची वापस कर देगा। "टाइप" और "लेवल" के लिए आपके परीक्षण केवल पहले तत्व को देखते हैं और काम करेंगे, लेकिन "प्रोमोशन नम्बर" के तहत ब्लॉक गैर-मौजूद दूसरे तत्व को देखने की कोशिश करता है और चेतावनी उत्पन्न करता है। –
कृपया आपको जो सटीक त्रुटि मिल रही है उसे पोस्ट करें। यह स्पष्ट नहीं है कि कौन सी रेखा समस्या पैदा कर रही है। – chepner
साथ ही, क्या हमें कोड के अधिक से अधिक दिखाना संभव होगा (कम से कम लूप जो '$ var' के मान को सेट करता है)। यह एक बहुत अजीब समस्या है। – chepner