To expand on anonymonks terseness, you need to make sure that the file is read and written as binary to avoid newline translations. "pushing raw" translates to prefixing the encoding with ':raw'. The following works (copies a utf16le file with futzing with it) for me, but without the ':raw's, I see the same symptoms you describe.
#! perl -slw
open IN, '<:raw:encoding(UTF-16LE)', $ARGV[ 0 ];
open OUT, '>:raw:encoding(UTF-16LE)', $ARGV[ 0 ] . '.modified';
print OUT <IN>;
close $_ for *IN, *OUT;
You can pass the same argument string to binmode
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.