A problem with your question, not an answer to your question:
@data = map { s/./X/; $_} @data;is incorrect too. Redundant, at least. It does the same as
map { s/./X/ } @data;which is a poor way (in my opinion) to write
s/./X/ for @data;