Si vous ne voulez pas le contenu de STDERR, alors la commande capture() de IPC::System::Simple est presque exactement ce que vous recherchez :
use IPC::System::Simple qw(capture system $EXITVAL);
my $output = capture($cmd, @args);
my $exit_value = $EXITVAL;
Vous pouvez utiliser capture() avec un seul argument pour invoquer l'interpréteur de commandes, ou plusieurs arguments pour éviter l'interpréteur de commandes de manière fiable. Il y a aussi capturex() qui n'appelle jamais l'interpréteur de commandes, même avec un seul argument.
Contrairement aux commandes système et backticks intégrées de Perl, IPC::System::Simple renvoie la valeur de sortie 32 bits complète sous Windows. Il lève également une exception détaillée si la commande ne peut pas être lancée, meurt à un signal, ou renvoie une valeur de sortie inattendue. Cela signifie que pour de nombreux programmes, plutôt que de vérifier vous-même les valeurs de sortie, vous pouvez vous fier à IPC::System::Simple pour faire le travail à votre place :
use IPC::System::Simple qw(system capture $EXIT_ANY);
system( [0,1], "frobincate", @files); # Must return exitval 0 or 1
my @lines = capture($EXIT_ANY, "baznicate", @files); # Any exitval is OK.
foreach my $record (@lines) {
system( [0, 32], "barnicate", $record); # Must return exitval 0 or 32
}
IPC::System::Simple est purement Perl, n'a pas de dépendances, et fonctionne à la fois sur les systèmes Unix et Windows. Malheureusement, il ne fournit pas de moyen de capturer STDERR, donc il peut ne pas convenir à tous vos besoins.
IPC::Run3 fournit une interface propre et facile pour replomber les trois gestionnaires de fichiers courants, mais malheureusement, il ne vérifie pas si la commande a réussi, vous devrez donc inspecter $ ? manuellement, ce qui n'est pas du tout amusant. Fournir une interface publique pour inspecter $ ? est quelque chose qui fait partie de mes priorités. liste des tâches à accomplir pour IPC::System::Simple, car inspecter $ ? de manière multiplateforme n'est pas une tâche que je souhaite à quiconque.
Il existe d'autres modules dans le IPC: : qui pourrait également vous aider. YMMV.
Tous les meilleurs,
Paul