perlquestion
bioMan
<p>I need to iterate over all the members of an array to search for the longest matching substrings between the members of the array without looking for matches between any array element and itself. Initially I used nested for loops, but because of the length of my strings (3k characters), and the number of elements (300) leads to prohibitive times for my search. It took a week just to check one element of the array against every other element.</p>
<p>I decided to see if grep and map could yield a better solution. My best attempt is below.</p>
<code>@array = (3..9, 9, 7, 65, 4);
$min = 1; # in my final program this will be 200
map {for $line($_+1..$#array){print ("\n$_\t$line\t", grep /(.{$min,}).*\1/, $array[$_].$array[$line])}} (0..$#array-1);</code>
<p>It gives me the index of the array elements containing the matches and the concatenated string containing the match. My original program gave me $1, but I can't see how to do that with the code above. Also this code returns the indices for pairs of array elements that do not contain a match (I'd love for them to disappear). Is there a better way to do this? I <i>really</i> don't want to have to learn C.</p>
<p>I realize no solution will be particularly fast, but a complete search in two weeks or less wouldn't bother me.</p>
<p>bioMan</p>