В заголовке вашего вопроса сказано, что вы хотите "CP1252", но затем в тексте своего вопроса вы говорите, что хотите "Latin-1". CP1252 и Latin-1 - это не одно и то же. CP1252 - это кодировка Microsoft, основанная на Latin-1, но с некоторыми символами, которые Microsoft сочла бесполезными, заменены другими символами.
Например, в CP1252 байт 0x93 представляет собой двойную левую кавычку («), но в Latin-1 это непечатный управляющий код.
Внутренняя кодировка Perl (почти, но не совсем) UTF-8. Вы можете взять байт CP1252 и преобразовать его в формат строки символов Perl UTF-8, например:
use Encode qw(decode);
my $char = decode("CP1252", "\x80");
Символ 0x80 в CP1252 является символом евро. В Unicode символом евро является U + 20AC. Так что теперь $ char будет установлен в "\ x {20AC}".
Ваша следующая проблема - вы хотите «распечатать» символы. Это может означать много вещей. Проблема в том, что вам нужно преобразовать внутреннее символьное представление Perl во все, что ожидает ваше устройство вывода.
Например, мое окно терминала Linux с удовольствием отображает UTF-8, поэтому я бы сделал следующее, чтобы распечатать символ евро:
binmode(STDOUT, ':utf8');
print $char, "\n";
Это вряд ли будет работать в командной строке Windows, хотя.
Если вы генерируете вывод HTML, вы должны выписать UTF-8 и убедиться, что у вас есть соответствующий заголовок для объявления кодировки. Это будет работать практически с любым браузером, выпущенным за последние 10-15 лет.