perl: Надо перекодировать текст из 'CP1251' в 'UCS-2BE' под windows
Может есть модуль какой то ... или процедура есть?
Поставил этот модуль
Что то не срабатывает, не подскажите что за ошибка
use Encode;
$msg='Test';
print "$msg\n" ;
$nomer=from_to($msg,"cp1251","iso-8859-1");
print "$nomer $msg\n" ;
Выход получаеться
Test
Undefined subroutine &main::from_to called at C:\Temp\dir32B.tmp\Untitled line 4.
ваша программа считает from_to принадлежащей пакету main::. потому что в Encode.pm from_to объявлена как экспортируемая по запросу. поэтому - либо явно укажите, какому пакету принадлежит from_to:
[highlight=perl]
Encode::from_to
[/highlight]
либо - явно импортируйте:
[highlight=perl]
use Encode qw(from_to);
[/highlight]
Только вот проблема новая появилась....
У меня Perl 5.6.1 (под Solaris 9)
а на cpan... самая старая версия Encode требует Perl 5,7
Где можно найти старые версии модуля...
Судя по
http://bbbike.radzeit.de/~slaven/cpantestersmatrix.cgi?dist=Encode%201.99;maxver=1
Скорее всего где то 1,87 версия...
http://cpan.org.ua/authors/id/D/DA/DANKOGAI/
Только всё равно...
Даже версия 1,0 требует perl 5.7....
perl Makefile.Pl
root@ipdb # perl Makefile.PL
Perl v5.7.3 required--this is only v5.6.1, stopped at Makefile.PL line 4.
BEGIN failed--compilation aborted at Makefile.PL line 4.
root@ipdb #
Вот такое происходит....
Ну и в readme файле к модулю написано
http://search.cpan.org/src/DANKOGAI/Encode-2.24/README
>>>>
DEPENDENCIES
This module requires perl5.7.3 or later.
<<<<
Нашёл... вроде аналогичная проблема была у человека с этим модулем...
Но вот знание английского меня подводит
Не могу понять как всё разрешилось
http://osdir.com/ml/lang.perl.modules.petal/2005-02/msg00027.html
Чё то он там завернул больно круто
perl Makefile.Pl
.
ну проблемы, в общем-то нету. и английский особо знать не надо :)
прогоните в каталоге с модулем вот такой bash сценарий:
[highlight=bash]
for FILE in `find ./`; do perl -i -pe "s/^use 5\.7\.\d;\n//g" $FILE; done
[/highlight]
либо руками найдите все упоминания о use 5.7.x во всех Makefile модуля и удалите :-)
после этого все собереться нормально:
Perl v5.7.2 required--this is only v5.6.2, stopped at Makefile.PL line 1.
BEGIN failed--compilation aborted at Makefile.PL line 1.
[squirl@pdeploy ~/Encode-1.00]$ for FILE in `find ./`; do perl -i -pe "s/^use 5\.7\.\d;\n//g" $FILE; done
Can't do inplace edit: ./ is not a regular file.
Can't do inplace edit: ./t is not a regular file.
Can't do inplace edit: ./Encode is not a regular file.
Can't do inplace edit: ./lib is not a regular file.
Can't do inplace edit: ./lib/Encode is not a regular file.
Can't do inplace edit: ./lib/Encode/CN is not a regular file.
Can't do inplace edit: ./lib/Encode/JP is not a regular file.
Can't do inplace edit: ./lib/Encode/KR is not a regular file.
Can't do inplace edit: ./bin is not a regular file.
Can't do inplace edit: ./EBCDIC is not a regular file.
Can't do inplace edit: ./Symbol is not a regular file.
Can't do inplace edit: ./TW is not a regular file.
Can't do inplace edit: ./KR is not a regular file.
Can't do inplace edit: ./CN is not a regular file.
Can't do inplace edit: ./Byte is not a regular file.
Can't do inplace edit: ./JP is not a regular file.
[squirl@pdeploy ~/Encode-1.00]$ perl5.6.2 Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Encode::Byte
Writing Makefile for Encode::CN
Writing Makefile for Encode::EBCDIC
Writing Makefile for Encode::JP
Writing Makefile for Encode::KR
Writing Makefile for Encode::Symbol
Writing Makefile for Encode::TW
Writing Makefile for Encode
а вообще - Encode не работает с 5.6 скорее всего потому, что в нем по другому осуществляется работа с Unicode и вообще кодировками, другое внутреннее представление символов и Encode потенциально может глючить
root@ipdb # perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Encode::Byte
Writing Makefile for Encode::CN
Writing Makefile for Encode::EBCDIC
Writing Makefile for Encode::JP
Writing Makefile for Encode::KR
Writing Makefile for Encode::Symbol
Writing Makefile for Encode::TW
Writing Makefile for Encode::Unicode
Writing Makefile for Encode
root@ipdb # make
cp lib/Encode/Supported.pod blib/lib/Encode/Supported.pod
cp encoding.pm blib/lib/encoding.pm
cp Encode/README.e2x blib/lib/Encode/README.e2x
cp lib/Encode/PerlIO.pod blib/lib/Encode/PerlIO.pod
cp Encode.pm blib/lib/Encode.pm
cp Encode/encode.h blib/lib/Encode/encode.h
cp lib/Encode/Guess.pm blib/lib/Encode/Guess.pm
cp lib/Encode/Unicode/UTF7.pm blib/lib/Encode/Unicode/UTF7.pm
cp lib/Encode/JP/H2Z.pm blib/lib/Encode/JP/H2Z.pm
cp lib/Encode/Encoder.pm blib/lib/Encode/Encoder.pm
cp lib/Encode/MIME/Name.pm blib/lib/Encode/MIME/Name.pm
cp lib/Encode/Encoding.pm blib/lib/Encode/Encoding.pm
cp lib/Encode/CJKConstants.pm blib/lib/Encode/CJKConstants.pm
cp lib/Encode/MIME/Header/ISO_2022_JP.pm blib/lib/Encode/MIME/Header/ISO_2022_JP.pm
cp lib/Encode/GSM0338.pm blib/lib/Encode/GSM0338.pm
cp Encode/_PM.e2x blib/lib/Encode/_PM.e2x
cp Encode/Changes.e2x blib/lib/Encode/Changes.e2x
cp lib/Encode/CN/HZ.pm blib/lib/Encode/CN/HZ.pm
cp lib/Encode/Alias.pm blib/lib/Encode/Alias.pm
cp lib/Encode/MIME/Header.pm blib/lib/Encode/MIME/Header.pm
cp Encode/_T.e2x blib/lib/Encode/_T.e2x
cp Encode/ConfigLocal_PM.e2x blib/lib/Encode/ConfigLocal_PM.e2x
cp Encode/Makefile_PL.e2x blib/lib/Encode/Makefile_PL.e2x
cp lib/Encode/JP/JIS7.pm blib/lib/Encode/JP/JIS7.pm
cp lib/Encode/Config.pm blib/lib/Encode/Config.pm
cp lib/Encode/KR/2022_KR.pm blib/lib/Encode/KR/2022_KR.pm
cp Byte.pm ../blib/lib/Encode/Byte.pm
/usr/bin/perl ../bin/enc2xs -"Q" -"O" -o byte_t.c -f byte_t.fnm
Constant name 'HASH(0x51bac)' has invalid characters at ../bin/enc2xs line 32
BEGIN failed--compilation aborted at ../bin/enc2xs line 32.
*** Error code 255
make: Fatal error: Command failed for target `byte_t.c'
Current working directory /tmp/Encode-2.24/Byte
*** Error code 1
make: Fatal error: Command failed for target `subdirs'