Thanks George. It reduced the total time to almost 50%.
Rafaqat Ali Chaudhary -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of George P. Sent: Tuesday, July 29, 2003 11:57 To: Rafaqat Ali Chaudhary Cc: [EMAIL PROTECTED] Subject: Re: Very slow array searching On Tue, 29 Jul 2003, Rafaqat Ali Chaudhary wrote: > Dear all, > > I've a function which searches a given number from an array and > returns the result. > > Function: > > 1. sub checkNumber($) > 2. { > 3. my ($l_number) = @_; > 4. my $l_status; > 5. my @matches= grep { /$l_number/ } @numbers; The grep function will look through all elements in @numbers and return all elements that match the pattern. Since you are only looking for the first match, a foreach loop will do just fine. Also, using the regular expression /$l_number/ will search for the number as a string in @numbers. That means that you will get TRUE, if @numbers contains ('101') and the number you are searching for is 1. One way of doing it is, $l_status = 'FALSE'; foreach (@numbers) { if ($_ == $l_number) { $l_status = 'TRUE'; last; } } Or, for the memory conscious, (since foreach involves loading all elements into memory) $l_status = 'FALSE'; for (my $i=0; $i < @numbers; $i++) { if ($numbers[$i] == $l_number) { $l_status = 'TRUE'; last; } } Bye, George P. > 6. if (@matches) { > 7. $l_status="TRUE"; > 8. } > 9. else { > 10. $l_status="FALSE"; > 11. } > 12. return $l_status; > 13. } -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]