मैं एक पर्ल स्क्रिप्ट पर काम कर रहा हूं जो हमारे नेटवर्क पर मशीनों की स्कैनिंग के स्वचालन में मदद करने के लिए है। मैं व्यापार द्वारा प्रोग्रामर नहीं हूं, लेकिन इस परियोजना को मुझे कम से कम कोई भी सौंपा गया है, और मैं काफी स्टंप हूं। मुझे बताए जाने की प्रकृति की व्याख्या करने से पहले, मुझे जो कुछ भी कर रहा है उसकी रूपरेखा बताएं।पर्ल एक सशर्त के भीतर मूल्य बदल रहा है?
असल में, यह स्क्रिप्ट हर घंटे घंटों में चली जाएगी। चलाए जाने पर, यह एक ऐसी फाइल की जांच करेगा जिसमें सक्रिय आईपी का लॉग हो और उन्हें केवल डीएचसीपी लॉग के खिलाफ जांचें जो स्थिर हैं। इसके बाद इन्हें एक हैश में रखा जाता है (एक नया अगर प्रारंभ करने के लिए ध्वजांकित किया जाता है, अन्यथा स्टेकिंग का उपयोग करके लोड किया जाता है), आईपी होने की कुंजी और एक सरणी के भीतर उनके मैक [0] और "आखिरी स्कैन की गई" तिथि [1] शुरू में सेट होती है 1 9 700101. स्क्रिप्ट का अगला भाग आज की तारीख और "आखिरी स्कैन" तिथि के बीच की तारीख की तुलना करता है - और यदि यह एक निश्चित सीमा के तहत है, तो यह हमारे स्कैनर को एक प्रश्न भेजता है।
जो मुद्दा मुझे इतना खो गया है वह यह है कि जब तिथि की जांच की जा रही है, तो मुझे लगता है कि तिथि मान (अद्यतन "अंतिम स्कैन") सशर्त में प्रवेश करने से पहले सेट किया जा रहा है। हालांकि यह मेरे लिए प्रतीत नहीं होता है, यह एकमात्र संभावना है जिसे मैं सोच सकता हूं।
कोड कि हैश
if(init == 1){
%SCAN =();
@data =();
foreach $key (keys %IPS){
$unsavedDB = 1;
$data[0] = $IPS{$key};
$data[1] = 19700101;
print $data[1];
$SCAN{$key} = \@data;
}
}else{
#repeat of the above code, but with a if(exists...) to prevent duplicates from being added to the hash that is loaded via storables.
}
कोड उस तारीख की जाँच करता है (जो पहले से सेट किया गया है, और आज के लिए 20,120,726 होगा) के लिए आईपी/MACs कहते हैं: यहाँ कोड के प्रासंगिक हिस्सा है। बीच उपरोक्त कोड और वहाँ पीछा कर रहा है कुछ भी नहीं है लेकिन टिप्पणी
$scanned = 0;
foreach $key (keys %SCAN){
$lastScanned = $SCAN{$key}[1];
if(($date - $lastScanned) > $threshold){
$unsavedDB = 1;
$toScan = ${$key}[0];
#omitted data for security reasons, just basically forms a string to send to a scanner
$SCAN{$key}[1] = $date;
$scanned++;
}
}
print "finished. $scanned hosts queued\n";
अब, कारण मुझे विश्वास है कि यह है कि मूल्य बदला जा रहा है इससे पहले कि पाश में प्रवेश है जब मैं पहले सही एक 'प्रिंट $ lastScanned' बयान जोड़ने 'अगर (($ तारीख ...) {' तिथि जो पहले भी $ तारीख को सौंपी गई थी, मुद्रित की गई थी - लेकिन अगर मैं '$ SCAN {$ key} [1] = $ date;' कथन, प्रिंट पर टिप्पणी करता हूं बयान '1 9 700101' तिथि और सबकुछ कार्य करेगा जैसा कि यह होना चाहिए। क्या हो रहा है? $ SCAN {$ key} [1] ऊपर दिखाए गए दो स्थानों को छोड़कर कभी छुआ नहीं जा रहा है।
क्षमा करें अगर यह बहुत बुरी तरह से है phrased, या समझ में नहीं आता है। मैंने कुछ ऐसा समझाया जो सेंट है मुझे घंटों के लिए कूद रहा है।
धन्यवाद!
धन्यवाद! यह बहुत उपयोगी था! मैं आपके द्वारा लिंक की गई सभी चीज़ों के माध्यम से पढ़ा जाएगा और कोड के उस चिंताजनक अनुभाग को संशोधित करूँगा! –