Je suis débutant en Perl et j'ai de la difficulté à utiliser l'appel "system". Voici un petit morceau de code où je tente d'exécuter 2 commandes shell:Pourquoi l'appel système Perl échoue-t-il avec un point?
# First command is :
# dot -Tpng $dottmpfile > $pngfile
# Second command is :
# rm $dottmpfile
if (!($pngfile eq "")) {
my @args = ("dot", "-Tpng", $dottmpfile, " > ", $pngfile);
system (join (' ' , @args))
or die "system @args failed : $!";
unlink $dottmpfile;
}
EDIT: Voici mon code, et je encore obtenir une erreur:
system dot -Tpng toto.dot > toto.png failed : Inappropriate ioctl for device at /home/claferri/bin/fractal.pl line 79.
Je l'ai utilisé system pour produire ce morceau de code.
Si vous voulez juste ça va rapidement, fusionnez la ligne entière en une seule chaîne et placez-la en arrière: $ result = \ 'dot -Tpng $ dottmpfile> $ pngfile \'; –
voir ici: http://stackoverflow.com/questions/2461472/how-can-i-run-an-external-command-and-capture-its-output-in-perl/2461664#2461664. Aussi, pour supprimer des fichiers, utilisez 'unlink()'.pas besoin d'appeler le système 'rm' – ghostdog74
Vous devriez utiliser $! plutôt que $? - Cela vous donnera le message d'erreur plutôt que le code d'erreur, et cela vous dira presque toujours ce qui s'est mal passé. –