Это не искажено, но стандартное экранирование Data :: Dumper с параметром конфигурации "Useqq" по умолчанию, перечисленным здесь . Data :: Dumper предназначен для отладки, и поэтому эта опция позволяет вам видеть, какие именно символы находятся, когда они не могут быть напечатаны.
Без use utf8;
ваша строка фактически содержит байты этого символа в кодировке UTF-8. а не сам символ, так как это то, что содержит файл. Вы можете убедиться в этом, проверив длину строки. use utf8;
заставляет интерпретатор декодировать исходный код из UTF-8, включая вашу литеральную строку.
Чтобы напечатать такие символы, его необходимо кодировать обратно в байты UTF-8. Вы можете сделать это напрямую:
use strict;
use warnings;
use utf8;
use Encode 'encode';
print encode 'UTF-8', 'The size is 200 μg';
Или вы можете установить слой кодирования на STDOUT, чтобы весь напечатанный текст был закодирован в UTF-8:
use strict;
use warnings;
use utf8;
binmode *STDOUT, ':encoding(UTF-8)';
print 'The size is 200 μg';
Кодировка в Отладка UTF-8 для Data :: Dumper, как правило, не нужна, поскольку она уже не содержит таких символов для вашего представления.