सर्वश्रेष्ठ सामान्य उद्देश्य - विशेष रूप से लघु सरणियों (1000 आइटम या उससे कम) और कोडर जो कि अनुकूलन के अनिश्चित हैं, उनकी आवश्यकताओं के अनुरूप है।
# $value can be any regex. be safe
if ( grep( /^$value$/, @array ) ) {
print "found it";
}
यह उल्लेख किया गया है कि grep सभी मानों से होकर गुजरता है, भले ही सरणी में पहला मान मेल खाता हो। यह सच है, हालांकि ज्यादातर मामलों के लिए grep अभी भी बहुत तेज है । यदि आप छोटे सरणियों (1000 से कम आइटम) के बारे में बात कर रहे हैं, तो अधिकांश एल्गोरिदम वैसे भी बहुत तेज़ होने वाले हैं। यदि आप बहुत लंबी सरणियों (1,000,000 आइटम) के बारे में बात कर रहे हैं, तो इस बात की परवाह किए बिना कि क्या आइटम पहले या बीच में है या सरणी में अंतिम है, क्रेप काफी जल्दी है।
अब सरणियों के लिए अनुकूलन के मामले:
यदि आपकी सरणी सॉर्ट की गई है , तो "बाइनरी खोज" का उपयोग करें।
यदि एक ही सरणी को बार-बार कई बार खोजा जाता है, तो इसे पहले एक हैश में कॉपी करें और फिर हैश की जांच करें। यदि मेमोरी एक चिंता का विषय है, तो सरणी से प्रत्येक आइटम को हैश में स्थानांतरित करें। अधिक स्मृति कुशल लेकिन मूल सरणी को नष्ट कर देता है।
यदि समान मानों को सरणी के भीतर बार-बार खोजा जाता है , तो आलसी कैश का निर्माण करें। (जैसा कि प्रत्येक आइटम को खोजा जाता है, पहले जांच लें कि क्या खोज परिणाम एक स्थायी हैश में संग्रहीत किया गया था। यदि खोज परिणाम हैश में नहीं मिला है, तो सरणी खोजें और परिणाम को जारी किए गए हैश में रख दें ताकि अगली बार हम इसे हैश में खोजें और खोज छोड़ें)।
नोट: ये अनुकूलन केवल तभी होगा जब लंबी सरणियों के साथ काम किया जाए। अनुकूलन खत्म मत करो।