I'm not actually sure what you're trying to do here, but I do know what's causing the error.
What it says right now is Match EITHER (this | that) OR (\w+) -> Any wordlike object including 'this' and 'that' and replace it with the first capture followed by the second capture. Do this globally (i.e. over and over until the whole string is changed).
The problem is, there's only ever one match. EITHER (this|that) matches, or (\w+) matches. Thus, $2 stays empty, thus uninitialized value.
while(<DATA>){for(split(' ',$_)){$_=reverse;print "$_ ";}};print "\b.\
+n";
__DATA__
tsuJ rehtonA lreP rekcaH