> Возможно, из-за того, что у скачиваемой страницы нет в заголовках charset.
или наоборот, есть.
> Если просто сохранить полученные данные в текстовый файл, потом их из этого же файла прочесть и вставить в базу — кодировка не портится!
хорошо бы увидеть код как читали, как писали.
> Если просмотреть этот текстовый файл, видно что кодировка там правильная, cp1251
это ещё ничего не доказывает )
По идее нужно знать как работает unicode
perldoc.perl.org/perlunitut.html
perldoc.perl.org/perluniintro.html
perldoc.perl.org/perlunifaq.html
habrahabr.ru/post/190584/
так же включить use strict, use warnings.
А так же в нужных местах делать Dump данных модулем Devel::Peek, а потом уже можно будет понять где баг. Ещё хорошо бы все используемые опции DBD::mysql видеть.
Пока что у меня впечатление что Ваш код не работает правильно с текстовыми строками perl, вместо этого использует везде legacy однобайтовую кодировку. Так тоже можно, тогда нужно использовать content а не decoded_content, раньше возможно работало, т.к. старая версия LWP не понимала кодировку именно этой страницы и вызов decoded_content был эквивалентен content. Непонятно правда, почему после чтения и записи из файла данные меняются. Впрочем на это могут повлиять опции, которые Вы используете при работе с файлами.