Mostly to focus on why you get no effect and no errors, this:
perlExp=\'s/^/\\/home\\/test\\/alpha\\/"$fldr"\\//\'
rename --verbose "$perlExp" ${fullmatchStr}
assigns to perlExp and passes to perl the string 's/^/\/home\/test\/alpha\/...\//' with the single quotes. That's a valid Perl expression...
yes, exactly, the IFS=" " read was in the original post. It does look odd the way I wrote it though..
Putting the IFS= inside the loop might make it seem like it only applies within the loop body. It'll probably look awkward or confusing either way, sigh.
But why bother setting it (well, blanking it) outside the loop at all, @ilkkachu?
I don't think it makes sense in the loop either, not unless the OP has tabs in the file that should not be taken as separators which seems unlikely, but if you're setting in the loop, why set it to the empty string outside it?
@terdon The unquoted expansion of ${fullmatchStr} needs to have IFS set to the empty string beforehand to prevent word splitting there. But then read needs to have it set to something that contains the space to get the two separate fields from the file. Conflicting demands. And then read would inherit the global IFS, if it wasn't explicitly given another value...
Doing while one; do two; IFS=; three; done; four would make it look like it's blanked only for three, while it really would be blanked for everything but the first repeats of one and two, so in that sense it makes it IMO clearer to set it before the loop.
...so muru's solution of just not putting the glob in a variable in the first place is better, too
There must be a better way than what the OP is doing. Maybe reading the dest and glob file into a shell array first, and then do for file in testfilename*$glob*txt; do... or something