2010-11-30 4 views
1

question rapide,Perl - commande pipe dans un autre

est-il un moyen de conduite d'une commande dans une autre commande via perl comme vous pouvez dans la ligne de commande * Nix?

Par exemple:
free -m | grep Mem

Comment pourrais-je être capable de faire la "tuyauterie" en Perl?

Répondre

6

Vous pouvez appeler la commande exactement comme ça:

system("free -m | grep Mem"); 

De l'documentation:

S'il n'y a qu'un seul argument scalaire, est vérifié l'argument de métacaractères, et s'il y a any, l'argument entier est passé à l'interpréteur de commandes du système pour l'analyse (c'est/bin/sh -c sur les plates-formes Unix, mais varie sur d'autres plates-formes). S'il n'y a pas de métacaractères dans l'argument, il est divisé en mots et transmis directement à execvp, ce qui est plus efficace.

Vous pouvez faire la même chose avec d'autres méthodes pour appeler des commandes externes, comme open:

open my $fh, "-|", "free -m | grep Mem" or croak "failed to run pipeline"; 
# and now read from $fh as usual 
+3

Mieux vaut utiliser les trois arguments ouvert: 'ouvrir mon $ fh, « - | », « libre -m | grep Mem "ou croak" Impossible d'exécuter le pipeline ";'? –

+0

A fait du bon travail. J'ai utilisé la méthode recommandée par Jonathan, mais la réponse originale m'a orienté dans la bonne direction. – drewrockshard

+0

@Jonathan: Merci, édité que dans. – Cascabel

Questions connexes