en Perl, pour exécuter un autre script Perl de mon script ou pour exécuter des commandes système telles que sont tous les trois identiques ou sont-ils différents? Est-ce que tous les trois donnent le même résultat dans chaque cas? Sont-ils utilisés dans différents scénarios, aiment appeler un programme PERL, nous devons utiliser S'il vous plaît conseiller, car j'utilise actuellement mv code>,
cp code>,
pkgADD code>, < Code> pkgrm code>,
pkginfo code>,
RPM code>, etc., nous pouvons utiliser ce qui suit: p>
système () code> li>
exécuté () code> li>
`` code> (backticks) li>
ul>
système () code> et pour d'autres que nous devons utiliser
`` ` code> (backtsticks). P >
système () code> pour tous les appels. P>
6 Réponses :
L'option meilleure em> est d'utiliser un module, que ce soit dans la bibliothèque standard ou dans la CPAN, qui fait le travail pour vous. Cela va être plus portable et éventuellement plus rapide pour des tâches rapides (pas de destination au système). P>
Cependant, si cela n'est pas assez bon pour vous, vous pouvez utiliser l'une de ces trois, et non, ils ne sont pas les mêmes. Lire le pages Perldoc sur système () code>
, EXEC () code>
et Backticks pour voir la différence. P>
Il y a plus d'une page dans Perlop (section "Opérateurs de citation", sous-section "QX / String /") ainsi que Perldoc -f Readpipe Code>.
Je l'ai trouvé. Il semble que j'ai manqué une forêt pour des arbres. Ou quelque chose.
Ils sont tous différents et les docs expliquent comment ils sont différents. Backticks capturent et retourne la sortie; système code> renvoie un statut de sortie et
exec code> ne revient jamais du tout s'il réussit. P>
appeler , vous devez dire p> regarder sur cpan pour des modules qui gèrent d'autres commandes pour vous. Si vous vous trouvez en train d'écrire beaucoup d'appels vers code> système code>, il peut être temps de revenir dans un script shell à la place. P> p> système code> est généralement une erreur. Par exemple, au lieu de dire
Je ne dirais pas que c'est généralement une erreur, juste que vous pourriez être capable de faire cette tâche dans Pure Perl. Il y a beaucoup d'utilisations valides pour le système ().
Je ne dis pas appeler système code> est une erreur, mais la plupart des gens appellent que ce sont des erreurs. Vous avez besoin d'une bonne raison d'appeler
système code>.
Si vous ne voulez pas que la coque s'implique (généralement, vous ne le faites pas) et si vous attendez que la commande système soit acceptable, je vous recommande d'utiliser IPC :: RUN3 CODE>
. Il est simple, flexible et la tâche commune de l'exécution d'un programme, de l'alimentation en entrée et de la capture de ses flux de sortie et d'erreur. P>
IPC :: System :: Simple est probablement ce que vous voulez. p>
Il fournit des alternatives sûres et portables aux backticks, System () et d'autres commandes IPC. P>
Il vous permet également d'éviter la coque pour la plupart desdites commandes, ce qui peut être utile dans certaines circonstances. P>
Eh bien, plus les gens sont les plus réponses. P>
Ma réponse est d'éviter généralement l'exécution des commandes externes. Si vous pouvez - utiliser des modules. Il n'y a pas de point d'exécution "CP", "MV" et beaucoup d'une autre commande - il existe des modules qui le font. Et le bénéfice de l'utilisation de modules est qu'ils fonctionnent généralement dans une plate-forme inter-plate-forme. Pendant que votre système ("MV") pourrait ne pas. P>
Lorsque vous avez mis en place une situation que je n'ai pas d'autre moyen, mais pour appeler la commande externe, je préfère utiliser IPC :: Run . L'idée est que toutes les méthodes simplistes (backtsticks, qx, système, ouverture avec tuyau) sont intrinsèquement peu sûres et nécessitent une attention particulière aux paramètres. P>
avec IPC :: Run , je gère des commandes comme je le ferais avec système (@array), qui est beaucoup plus sécurisé et que je peux se lier à STDIN, STDOUT et STDERR séparément, à l'aide de variables ou de rappel, qui est En outre, il possède une manipulation intégrée des délais d'attente, qui sont pratiques plus d'une fois :) p>
Ceci est un duplicatin de Stackoverflow.com/Questtions/797127/...
Ce n'est pas un duplicata, comme cette question ne mentionne pas
exécuté () code>.
Non, mais c'est un duplicatin de Stackoverflow.com/questions/799968/... :)