Как я могу заставить ActivePerl хорошо играть с экраном cygwin? - PullRequest
6 голосов
/ 23 января 2010

Я хотел бы использовать инструменты cygwin (экран) для разработки, и при запуске отладчика Perl ActiveState из среды cygwin выдается следующая ошибка.

bash-3.2$ perl -d test.pl
The system cannot find the path specified.
Unable to get Terminal Size. The Win32 GetConsoleScreenBufferInfo call didn't work. The COLUMNS and LINES environment variables didn't work. The resiz
e program didn't work. at F:/Perl/lib/Term/ReadKey.pm line 362.
Compilation failed in require at F:/Perl/lib/Term/ReadLine/Perl.pm line 64.
 at F:/Perl/lib/Term/ReadLine/Perl.pm line 64
        Term::ReadLine::Perl::new('Term::ReadLine', 'perldb', 'GLOB(0x18e2e0c)', 'GLOB(0x1883e14)') called at F:/Perl/lib/perl5db.pl line 6073
        DB::setterm called at F:/Perl/lib/perl5db.pl line 2237
        DB::DB called at testReliance1.pl line 2
Attempt to reload Term/ReadLine/readline.pm aborted.
Compilation failed in require at F:/Perl/lib/Term/ReadLine/Perl.pm line 64.
END failed--call queue aborted at testReliance1.pl line 64.
 at testReliance1.pl line 64
bash-3.2$

Я не смог найти обходного пути для этого.
Попытка использовать распространение perl в cygwin, но компиляция модулей perl под cpan для меня кошмар, так как большинство из них не компилируется и не обладает глубокими знаниями для исправления ошибок компилятора.

Предоставление фальшивого терминала для отладчика может сработать, но понятия не имеем о возможности и как продолжить.
Пожалуйста, предложите, если есть какие-либо обходные пути для этого.

Ответы [ 5 ]

1 голос
/ 26 января 2010

Мне кажется, что у тебя много проблем. ActiveState Perl - это попытка порта Perl для окон с бинарным распределением и контролем версий для модулей, такой подход умирает. Успех клубничный перл и мой личный опыт заставляют меня думать, что вы просто используете не тот продукт.

Я использую исключительно клубнику и количество проблем, с которыми я столкнулся после миграции, могу рассчитывать с одной стороны. Я очень рад, что перешел из ActiveState. Я бы посоветовал вам тоже попробовать. Strawberry поставляется со средой mingw - она ​​даже скомпилирует для вас модули XS и откроет вам доступ к CPAN без изменений.

(это совершенно нерегулярный ответ, но я вполне уверен, что я использовал мусорную корзину Perl Strawbery в Cygwin, и она сработала)

Решение - Использовать Cygwins Term ReadKey

По сути, вам просто нужно, чтобы Cygwin Term::ReadKey сидел выше в вашем порядке иерархии библиотек, чтобы он использовался.

  1. Создать каталог D: \ foo_lib
  2. Скопируйте термин Term / ReadKey каталог из вашего cygwins / usr / lib / perl в D: \ foo_lib
  3. Копировать Term / ReadKey.pm в D: \ foo_lib \ Term \
  4. prepend PERL5LIB = "D: \ foo_lib" в вашей среде для Perl StrawBerry.

или *. 1026 *


Запустите это из Cygwin.

perl -MTerm::ReadKey -E"say Term::ReadKey::termsizeoptions()"

Каким бы ни было это значение, отредактируйте Term / ReadKey.pm из вашей ручной установки Strawberry, установите переменную

  1. my $termoption = value_you_got from above
  2. заменить &termsizeoptions(), с $termoption
1 голос
/ 23 января 2010

Из раздела "Окружающая среда" в документе Term :: ReadLine :

Переменная среды PERL_RL определяет, какой клон ReadLine загружен. Если значение равно false, используется фиктивный интерфейс.

В качестве обходного пути до устранения несовместимости вы можете отключить Term :: ReadLine с помощью

bash$ PERL_RL=0 perl -d test.pl
1 голос
/ 26 января 2010

Помните, что консоль Windows предоставляет совершенно другую среду для обычной * nix консоли. В общем, приложения Windows, которые хотят взаимодействовать с консолью, не будут работать в консолях Cygwin (например, MinTTY, XTerm, Screen), поскольку они обеспечивают только эмуляцию PTY.

Энди Коппе, автор MinTTY , написал небольшую программу под названием conin , которая позволяет программам Windows читать как из консоли, но полная поддержка вывода по-прежнему считается невозможной.

0 голосов
/ 07 мая 2014

Используйте wperl.exe, который поставляется с Perl ActiveState. Это имеет тенденцию работать правильно.

0 голосов
/ 23 января 2010

Попробуйте запустить эту команду перед запуском Perl:

export COLUMNS LINES
...