perl - à l'aide de backticks au lieu de system()
J'ai un script perl qui appelle un autre script perl à l'aide de system()
c'est comme:
my $returnval= system("perl", $path,$val1, $val2,@myarray);
Parce que system() ne retourne que le statut de sortie, mais je veux que le script est sortie je veux utiliser backticks.
J'ai essayé quelque chose comme ça:
my $returnval = `$path`;
comment puis-je ajouter les paramètres du script?
comment les autres script perl de retour de ce à quoi ressemble le code? Pour le moment c'est comme
exit ($myreturnedvalue);
(comment) Est-il possible de retourner plusieurs valeurs?
Malheureusement, je ne comprends pas la question sur le retour de plusieurs valeurs. Souhaitez-vous préciser?
Je veux appeler un script avec les paramètres, puis je veux que le script de sortie et cette sortie, a-t-elle à être une valeur unique ou peut-il être un tableau ou deux paramètres comme sortie (x1,x2)
Vous ne pouvez retourner un morceau de texte (ou des données binaires). Si vous souhaitez avoir plusieurs valeurs, alors le script que vous appelez doit renvoyer une sérialisés structure de données (séparés par un espace, JSON, XML, etc) que vous analysez dans votre Perl.
ah, ok, donc je dois travailler sur le texte pour l'extraction de l'information que je veux, merci 🙂
Êtes-vous essayer d'avoir perl fonctions dans plus d'un fichier à l'intérieur du programme, ou êtes-vous de la difficulté à comprendre comment utiliser
Je veux appeler un script avec les paramètres, puis je veux que le script de sortie et cette sortie, a-t-elle à être une valeur unique ou peut-il être un tableau ou deux paramètres comme sortie (x1,x2)
Vous ne pouvez retourner un morceau de texte (ou des données binaires). Si vous souhaitez avoir plusieurs valeurs, alors le script que vous appelez doit renvoyer une sérialisés structure de données (séparés par un espace, JSON, XML, etc) que vous analysez dans votre Perl.
ah, ok, donc je dois travailler sur le texte pour l'extraction de l'information que je veux, merci 🙂
Êtes-vous essayer d'avoir perl fonctions dans plus d'un fichier à l'intérieur du programme, ou êtes-vous de la difficulté à comprendre comment utiliser
$?
dans votre programme? $output = ˋcmd arg1 arg2ˋ; $status = $?;
obtient la sortie et l'état séparément.OriginalL'auteur Tyzak | 2012-06-03
Vous devez vous connecter pour publier un commentaire.
De passer par le shell afin de déplacer des données d'un script perl à l'autre n'est pas la meilleure solution. Vous devriez savoir que les backticks ou
qx()
capte tout ce qui est imprimé sur la sortie standard STDOUT. À l'aide deexit ($var)
de l'autre script est peu probable d'être correctement capturées. Vous devezprint $var
. Mais ne le faites pas.Au lieu de cela, rendre l'autre script dans un module et de l'utilisation de la sous-routine directement. C'est un exemple simpliste:
Dans la barre.pm:
Dans main.pl:
Il y a beaucoup de choses à apprendre, et je vous suggère de lire sur le de la documentation.
OriginalL'auteur TLP
Les backticks fonctionnent tout simplement comme une invocation directe on pourrait faire dans un shell:
Est essentiellement la même que
C'était juste un exemple pour la transmission des paramètres. Remplacer avec quoi que ce soit applicable pour votre scénario; fondamentalement
$val1 $val2
...OriginalL'auteur mjhennig
Vous voulez IPC::System::Simple's
capturex
.Il gère même les erreurs pour vous.
capturex
est.OriginalL'auteur ikegami
Pour invoquer d'autres programmes de passage d'arguments et de la capture de la sortie dans le même temps, je suis un grand fan de
IPC::Run
:IPC::Run
,IPC::Cmd
fournit des fonctionnalités similaires et est un module de base.OriginalL'auteur LeoNerd
N'est-ce pas faire ce que vous voulez?
@Quentin cependant, ajoute ce conseil utile: Si la valeur que vous souhaitez passer est
foo "bar
puis dans le shell que vous avez à faire quelque chose comme"foo \"bar"
. À l'aide d'arguments supplémentaires pour système de carte pour vous. À l'aide de backticks ne le ferez pas; vous avez besoin pour construire le shell de commande que vous souhaitez manuellement.Merci pour les conseils. J'avoue que je ne sais pas ce autoquoting est. Un rapide grep par le biais de mon Perl manpages tourne jusqu'à trois, cryptique, en passant les références à "autoquoting" ou "auto-citant le," mais ils n'expliquent pas, ni ne fait une recherche sur le web tournez immédiatement à quelque chose de très instructif. Si vous pouvez épargner un moment, voulez-vous expliquer un peu plus? Merci.
J'ai essayé et après que j'ai essayé
$path /$val1 /$val2 /@myarray
, les deux ne fonctionne pas :>Si la valeur que vous souhaitez passer est
foo "bar
puis dans le shell que vous avez à faire quelque chose comme"foo \"bar"
. À l'aide d'arguments supplémentaires poursystem
va prendre la carte pour vous. À l'aide de backticks ne le sera pas, vous avez besoin pour construire le shell de commande que vous souhaitez manuellement.$path \$val1 \$val2 \@myarray
œuvres d'appeler la fonction avec le paramètre. mais les valeurs retournées ne semble pas adaptée. Dois-je écrire la valeur de retour de la sortie fonction comme: sortie(valeur1); ?OriginalL'auteur thb