วัตถุประสงค์ทั่วไปที่ดีที่สุด - โดยเฉพาะอย่างยิ่งอาร์เรย์สั้น (1,000 รายการหรือน้อยกว่า) และตัวแปลงสัญญาณที่ไม่แน่ใจว่าการเพิ่มประสิทธิภาพเหมาะสมกับความต้องการของพวกเขามากที่สุด
# $value can be any regex. be safe
if ( grep( /^$value$/, @array ) ) {
print "found it";
}
มีการกล่าวถึงว่า grep ส่งผ่านค่าทั้งหมดถึงแม้ว่าค่าแรกในอาร์เรย์จะตรงกัน นี่คือความจริง แต่grep ยังคงเป็นไปอย่างรวดเร็วมากสำหรับกรณีส่วนใหญ่ หากคุณกำลังพูดถึงอาร์เรย์สั้น (น้อยกว่า 1,000 รายการ) อัลกอริธึมส่วนใหญ่จะค่อนข้างเร็ว หากคุณกำลังพูดถึงอาร์เรย์ที่มีความยาวมาก (1,000,000 รายการ) grep นั้นเป็นที่ยอมรับอย่างรวดเร็วโดยไม่คำนึงว่ารายการนั้นเป็นรายการแรกหรือตรงกลางหรือสุดท้ายในอาร์เรย์
กรณีการเพิ่มประสิทธิภาพสำหรับอาร์เรย์ที่ยาวกว่า:
หากอาร์เรย์ของคุณถูกจัดเรียงให้ใช้ "การค้นหาแบบไบนารี"
หากมีการค้นหาอาร์เรย์ซ้ำหลายครั้งให้คัดลอกลงในแฮชก่อนจากนั้นตรวจสอบแฮช หากมีปัญหาเกี่ยวกับหน่วยความจำให้ย้ายแต่ละรายการจากอาร์เรย์ไปยังแฮช หน่วยความจำมีประสิทธิภาพมากขึ้น แต่ทำลายอาเรย์ดั้งเดิม
หากค่าเดียวกันถูกค้นหาซ้ำ ๆภายในอาเรย์ให้สร้างแคชอย่างเกียจคร้าน (ในขณะที่ค้นหาแต่ละไอเท็มอันดับแรกให้ตรวจสอบว่าผลการค้นหาถูกเก็บไว้ในแฮชที่คงอยู่หรือไม่หากผลการค้นหาไม่พบในแฮชแล้วค้นหาอาเรย์และวางผลลัพธ์ในแฮชที่คงอยู่ ค้นหาในแฮชและข้ามการค้นหา)
หมายเหตุ: การเพิ่มประสิทธิภาพเหล่านี้จะเร็วขึ้นเมื่อจัดการกับอาร์เรย์ที่ยาวนาน เพิ่มประสิทธิภาพไม่เกิน