6 votes

Comment puis-je faire en sorte qu'ActivePerl joue bien avec l'écran de cygwin ?

J'aimerais utiliser les outils cygwin (écran) pour le développement et l'invocation du débogueur ActiveState Perl à partir de l'environnement cygwin provoque l'erreur suivante.

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$

Je n'ai pas trouvé de solution de contournement pour cela.
J'ai essayé d'utiliser la distribution perl de cygwin, mais la compilation des modules perl sous cpan est un cauchemar pour moi car la plupart d'entre eux ne compilent pas et je n'ai pas de connaissances approfondies pour corriger les erreurs de compilation.

Fournir un faux terminal pour le débogueur pourrait fonctionner mais je n'ai aucune idée de la faisabilité et de la façon de procéder.
Veuillez suggérer s'il existe une solution de contournement pour cela.

1voto

Greg Bacon Points 50449

De la Section "Environnement" de la documentation de Term::ReadLine :

La variable d'environnement PERL_RL détermine quel clone de ReadLine est chargé. Si la valeur est false, une interface factice est utilisée.

En attendant que l'incompatibilité soit résolue, vous pouvez désactiver Term::ReadLine à l'aide de la fonction

bash$ PERL\_RL=0 perl -d test.pl

1voto

Andrew Aylett Points 16469

N'oubliez pas que la console Windows offre un environnement très différent de celui de votre console *nix habituelle. En général, les applications Windows qui veulent interagir avec la console ne fonctionneront pas dans les consoles Cygwin (comme MinTTY, XTerm, Screen) car elles ne fournissent qu'une émulation PTY.

Andy Koppe, auteur de MinTTY a écrit un petit programme appelé conin pour permettre aux programmes Windows de lire comme s'ils étaient sur la console, mais la prise en charge complète de la sortie est toujours considérée comme infaisable.

1voto

Evan Carroll Points 13420

Il me semble que vous avez beaucoup de problèmes. ActiveState Perl est une tentative de portage de Perl sur Windows avec distribution binaire et contrôle de version pour les modules, cette approche est en train de mourir. Le succès de perle de fraise et mon expérience personnelle me fait penser que vous utilisez simplement le mauvais produit.

J'utilise exclusivement strawberry et le nombre de problèmes que j'ai rencontrés depuis la migration se compte sur les doigts d'une main. Je suis très heureux de m'être converti d'ActiveState. Je vous suggère d'essayer aussi. Strawberry est livré avec un environnement mingw -- il compilera même les modules XS pour vous, et il vous ouvre à un CPAN pur et dur.

(c'est une réponse totalement décalée, mais je suis presque certain d'avoir utilisé le bin de strawbery perl dans cygwin et cela a fonctionné).

Solution - Utilisez le Term ReadKey de Cygwins

Essentiellement, vous avez simplement besoin de l'option Cygwin Term::ReadKey pour être plus haut dans la hiérarchie des librairies et être utilisé.

  1. Créer un répertoire D:\foo_lib
  2. Copiez le répertoire term/ReadKey de votre cygwins /usr/lib/perl vers D:\foo_lib
  3. Copiez Term/ReadKey.pm vers D:\foo_lib\Term\
  4. ajouter PERL5LIB=" D:\foo_lib " à votre environnement pour StrawBerry perl.

ou.


Lancez ça, depuis Cygwin.

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

Quelle que soit cette valeur, éditez Term/ReadKey.pm à partir de votre installation de Strawberry et introduisez-la à la main, en définissant une variable

  1. my $termoption = value_you_got from above
  2. substitut &termsizeoptions() con $termoption

0voto

Chris Jester-Young Points 102876

Essayez d'exécuter cette commande avant de lancer Perl :

export COLUMNS LINES

0voto

M Tawfik Points 11

Utilisez wperl.exe qui est emballé avec ActiveState perl. Cela a tendance à fonctionner correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X