Что включать при использовании Encode с PAR Packer
Я работал с PAR::Packer для создания автономных исполняемых файлов из сценариев Perl. Единственная трудность, с которой я столкнулся, это выяснить, какие дополнительные библиотеки DLL я должен заставить включить через -l
вариант.
Сейчас я работаю со скриптом Perl, который требует кодирования с utf16-le. Encode::find_encoding
Функция прекрасно работает в скрипте, но не работает после того, как я ее упаковал pp
,
Вот крошечный скрипт (назовем его encode.pl) для иллюстрации проблемы:
use strict;
use warnings;
use Encode;
my $_UTF16 = Encode::find_encoding ('utf16-le');
print $_UTF16;
Если вы запустите это, он напечатает что-то вроде Encode::Unicode=HASH(xxxxxx)
, Упакуйте это с pp
Однако и это больше не работает
pp -o encode_test.exe encode_test.pl
Теперь, когда я запускаю encode_test.exe, я получаю это:
Use of uninitialized value $_UTF16 in print at script/encode_test.pl line 5.
Может кто-нибудь сказать мне, что мне нужно сделать (например, какие библиотеки включить или любое другое решение), чтобы заставить эту работу сразу после упаковки с pp
?
1 ответ
Бег pp
с -x
опция работает, конечно, но использование ее было неприемлемо в моем случае, потому что она запускает программу, и, поскольку это приложение с графическим интерфейсом, эта команда больше не будет автоматизируемой.
Преступник был требованием времени выполнения, используемым Encode.pm, строка 120, для загрузки Encode::Unicode. Чтобы эта программа работала, я использовал следующее:
pp -o encode_test.exe encode_test.pl -M C:/strawberry/perl/lib/Encode/Unicode.pm
Обратите внимание, что использование обратной косой черты (способ Windows) вызывает сбой в pp
команда, поэтому те должны были быть заменены с косыми чертами.