如何在perl中使用管道

时间:2013-10-10 04:41:58

标签: perl pipe pstree

我的语法是

my $pstree = `pstree -p $pid|wc`;

但我收到了错误。

sh: -c: line 1: syntax error near unexpected token `|'

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您的变量$pid不仅仅是一个数字;它可能有一个尾随的换行符。

见:

use Data::Dumper;
print Data::Dumper->new([$pid])->Terse(1)->Useqq(1)->Dump;

答案 1 :(得分:1)

这是有效的perl,你的shell是抱怨的。你把#!/ bin / perl放在脚本的顶部了吗?它可能是由bash解释的,而不是perl。

host:/var/tmp root# ./try.pl
5992  zsched
  6875  /usr/local/sbin/sshd -f /usr/local/etc/sshd_config
    3691  /usr/local/sbin/sshd -f /usr/local/etc/sshd_config -R
      3711  -tcsh
        6084  top 60
===
       5      16     175


host:/var/tmp root# cat try.pl 
#!/bin/perl

my $pstree = `ptree 3691`;
my $wc = `ptree 3691 | wc`;
print STDOUT $pstree;
print STDOUT "===\n";
print STDOUT $wc;

答案 2 :(得分:1)

您可以使用Perl,而不是使用shell进行计数,这可以为您节省shell命令中的进程和一些复杂性:

my $count = () = qx(pstree -p $pid);

qx()与反引号做同样的事情。空括号将qx()放入列表上下文中,这使得它返回一个列表,然后在标量上下文中是大小。这是一个捷径:

my @list  = qx(pstree -p $pid);
my $count = @list;