Out of curiosity, I also tried the benchmark script with a sub using the join and index functions as follows:
my %subs =
(
join_index =>
sub {
my $joined = '#' . join('#', @Array) . '#';
return (index($joined, '#TEST#') >= 0) ? 1 : 0;
},
grep_block =>
sub {
GREP: {
grep { $_ eq TEST and next GREP } @Array;
return;
} continue {
return 1;
}
},
... etc.
It seemed to fare better when the match was towards the end of the 'joined' string (Fastest at matching positions 0.8 and 0.9 out of all the other subs on my machine). The interesting thing was that it yielded similar rates for all matching positions. It could be that the join function is expensive compared to the index function (likely), so the timing is swamped by joining the elements in the array. Which also indicates that the index function is FAST...