in reply to Little annoying mistakes ... of others

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;

If you're setting up a chain, you'd want one of
map { my $s = $_; $s =~ s/./X/; $s }
apply { s/./X/ }   # From List::MoreUtils
Filter { s/./X/ }  # From Algorithm::Loops