The =~ operator and s/// don't work the way you use them. You should also be seeing some warnings from Perl about
Useless use of private variable in void context at ... line 10.
which should have made you suspicious about your code.
I think what you likely want is to learn about how =~ applies to variables, via perlop and perlre. I guess the following line could meet your intentions:
(my $linefinal = $line) =~ s/.../.../;
I see that you took some time to actually gather test input and output, but please test your posted code before posting it - your code doesn't read from the DATA handle.