Je suis un nouvel utilisateur de perlbrew, car je souhaite passer à perl 5.30.0 sur Ubuntu.
J'ai fait
IPC::System::Simple required for Fatalised/autodying system() at /home/con/Scripts/say.pl line 6. main::BEGIN() called at /home/con/Scripts/say.pl line 6 eval {...} called at /home/con/Scripts/say.pl line 6 BEGIN failed--compilation aborted at /home/con/Scripts/say.pl line 6. Command exited with non-zero status 2
donc j'essaye d'exécuter ceci script de test:
#!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use feature 'say'; use autodie ':all';
mais cela donne la longue erreur
perlbrew init perlbrew install perl-5.30.0 perlbrew switch perl-5.30.0
Je pensais que les bibliothèques (en particulier les standard) étaient supposées être chargé automatiquement via perlbrew? Comment puis-je exécuter ce simple script?
3 Réponses :
J'obtiens exactement la même erreur sur un Perl non perlbrew. Il semble que autodie nécessite IPC :: System :: Simple lors de l'exécution sous des avertissements fatals ou avec : all
, mais il ne l'exige pas lors de l'installation.
Voir aussi https://bugzilla.redhat.com/show_bug.cgi?id = 1183231 .
Alors, comment dois-je modifier mon script pour pouvoir utiliser autodie ': all'
?
Ajoutez use IPC :: System :: Simple
et installez-le pour toutes les perls dont vous avez besoin pour exécuter le script.
(il n'est pas nécessaire d'utiliser IPC :: System :: Simple;
pour que autodie
fonctionne avec : all
, juste que le module est sur le système)
cpanm
dit que `IPC :: System :: Simple` est déjà installé, mais perlbrew ne peut pas le trouver :(
@con, Re " cpanm
dit que` IPC :: System :: Simple` est déjà installé ", Vous utilisez probablement le mauvais cpanm
. Vous devez utiliser celui installé par le perl
pour lequel vous souhaitez installer des modules. Vous n'en avez probablement pas installé un avec le perl
en question, et il en récupère un autre dans votre chemin. Pourquoi compliquer les choses en utilisant cpanm
? Utilisez simplement cpan IPC :: System :: Simple
.
@ikegami malheureusement installer l'installation avec cpanm
donne toujours la même erreur: (même lorsque je fais l'installation dans le shell perlbrew: (tout est à jour avec la version 1.25
@con J'ai eu des problèmes similaires à cause de local :: lib
(et / ou PERL5LIB
)
Veuillez fournir la sortie de quel cpan; head -1 "$ (quel cpan)"; quel perl; perl -le'print "$ _ = $ ENV {$ _}" pour le tri grep / ^ PERL /, clés% ENV; '
@ikegami dans le shell normal / usr / bin / cpan #! / usr / bin / perl / usr / bin / perl
& perlbrew / home / con / perl5 / perlbrew / perls / perl- 5.30.0 / bin / cpan #! / Home / con / perl5 / perlbrew / perls / perl-5.30.0 / bin / perl /home/con/perl5/perlbrew/perls/perl-5.30.0/bin/perl PERL5LIB = PERLBREW_LIB = PERLBREW_MANPATH = / home / con / perl5 / perlbrew / perls / perl-5.30.0 / man PERLBREW_PATH = / home / con / perl5 / perlbrew / bin: / home / con / perl5 / p erlbrew / perls / perl-5 .30.0 / bin PERLBREW_PERL = perl-5.30.0 PERLBREW_ROOT = / home / con / perl5 / perlbrew PERLBREW_SKIP_INIT = 1 PERLBREW_VERSION = 0,86 PERL_LOCAL_LIB_ROOT =
Un autre: /home/con/perl5/perlbrew/perls/perl-5.30.0/bin/perl -e'use IPC :: System :: Simple '; /home/con/perl5/perlbrew/perls/perl-5.30.0/bin/cpan IPC :: System :: Simple; /home/con/perl5/perlbrew/perls/perl-5.30.0/bin/perl -e'use IPC :: System :: Simple '
(J'ai deux choses à changer, mais j'attendrai d'abord cette réponse)
Depuis autodie , nous voyons qu'il s'agit d'un comportement documenté
Si
system
est spécifié comme argument deautodie
, alors il utiliseIPC :: System :: Simple
pour faire le gros du travail. Voir la description de cela module pour plus d'informations.
Il faut donc IPC :: System :: Simple installé pour : toutes les balises
(ce qui implique system
).
Il me semble curieux qu'une fonctionnalité de base nécessite un module non essentiel, et discrètement aussi (ne se plaint pas lors de l'installation).
La solution, selon @ikegami, et qui a fonctionné pour moi: /home/con/perl5/perlbrew/perls/perl-5.30.0/bin/perl -e'use IPC :: System :: Facile'; /home/con/perl5/perlbrew/perls/perl-5.30.0/bin/cpan IPC :: System :: Simple; /home/con/perl5/perlbrew/perls/perl-5.30.0/bin/perl -e'use IPC :: System :: Simple '
bien sûr, pour n'importe qui à l'avenir, ce sera légèrement différent pour vous, car vos répertoires peuvent être définis différemment et le nom d'utilisateur n'est pas con
Très curieux. J'obtiens la même chose sur perlbrew géré v5.29.2 (qui fonctionne autrement comme prévu)