Perl, 226 char
sub h($){"row ",$%=1+($x=pop)/$W,", column ",1+$x%$W}
@S=map/[^ ]/g,;
B:for(@ARGV){
for$d(map{$_,-$_}1,$W=@S/$.,$W-1,$W+1){
A:for$s(0..$#S){
$t=$s-$d;for(/./g){next A if$S[$t+=$d]ne$_||$t<0}
print h$s,' --> ',h$t,$/;
next B
}}}
Character count excludes newlines and indentation, which are included for readability.
I assume the matrix of letters is specified with standard input and the target words are command-line arguments.
First line (after the sub h
definition) maps all non-space characters into a single array @S
. Then iterate over all the target words, over the possible directions that words may appear in ($W
is the width of the puzzle), and over all of the letters in the current target word until a match is found.
$ perl wordsearch.pl CODEGOLF RACECAR BYKLHQU < row 5, column 1
row 14, column 3 --> row 14, column 9
row 3, column 12 --> row 9, column 6