Perl - труба командует в другой - PullRequest
1 голос
/ 30 ноября 2010

Быстрый вопрос,

Есть ли способ передать команду в другую команду с помощью perl, как вы можете в командной строке * Nix?

Например:
free -m | grep Mem

Как бы я смог выполнить "трубопровод" в Perl?

1 Ответ

6 голосов
/ 30 ноября 2010

Вы можете вызвать команду в точности так:

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

Из документации :

Если есть только один скалярный аргумент, аргументпроверяется на наличие метасимволов оболочки, и, если они есть, весь аргумент передается в системную командную оболочку для анализа (это / bin / sh -c на платформах Unix, но отличается на других платформах).Если в аргументе нет метасимволов оболочки, он разбивается на слова и передается непосредственно в execvp, что более эффективно.

Вы можете сделать то же самое с другими методами для вызова внешних команд, например open:

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