Здравствуйте, Eugene!
Ответ на сообщение Eugene Grosbein (2:5006/1) к Mikhail Stakhanov,
написанное 05 апр 19 в 16:38:
EG> 05 апр. 2019, пятница, в 05:37 NOVT, Mikhail Stakhanov написал(а):
MS>> Ответ на сообщение Alexey Vissarionov (2:5020/545) к Mikhail
MS>> Stakhanov, написанное 04 апр 19 в 18:36:
MS>>>> Слушайте а как вы кодите ?
MS>>>> вот я писал сегодня прогу в винде в фаре, потом перенес ее на
MS>>>> linux и там отстроил, так у меня usage и системные сообщения
MS>>>> UTF-8 А все для внутренних фидо файлов CP866
AV>>> use Encode;
MS>> from_to у меня не работает.... не понимаю почему.
EG> А внимательно читал доку на Encode?
EG> from_to требует 1) переменной, а не константной строки, 2) переменной
EG> с данными во внешней кодировке, а не внутреннем перловском
EG> представлении, то есть нельзя в качестве теста тупо присвоить
EG> переменной строковую константу и попытаться её перекодировать через
EG> from_to, если текст скрипта в utf-8, а константа не чисто латинница,
EG> которая перед стартом кода неявно транслируется во внутреннее
EG> представление.
EG> А ты для чего конкретно пытаешься применить from_to?
EG> Эта функция редко бывает полезна на самом деле, потому что чаще всего
EG> perl все данные конвертирует во внутреннее представление при обычном
EG> файловом вводе-выводе автоматически, а для таких переменных
EG> нужно использовать encode() вместо from_to().
use strict;
use warnings;
use Encode qw(decode encode);
use utf8;
opendir(DIR, "d:\\") or die "can't open $!";
my @files = grep !/^\.\.?$/, readdir DIR;
close DIR;
print join ("\n",@files);
foreach my $tmp (@files) {$tmp=decode("cp1251",$tmp)};
print join ("-----\n",@files);
foreach my $tmp (@files) {$tmp=encode("utf8",$tmp)}; <- это уже не нужно так
как use utf8! (но понятно как это работает теперь! Спасибо!
print join ("111 \n",@files);
Всего наилучшего, Mikhail