Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在perl中使用管道_Perl_Pipe_Pstree - Fatal编程技术网

如何在perl中使用管道

如何在perl中使用管道,perl,pipe,pstree,Perl,Pipe,Pstree,我的语法是 my $pstree = `pstree -p $pid|wc`; 但是我犯了一个错误 sh: -c: line 1: syntax error near unexpected token `|' 有什么想法吗?您的变量$pid不仅仅是一个数字;它可能有一个尾随的换行符 请看以下内容: use Data::Dumper; print Data::Dumper->new([$pid])->Terse(1)->Useqq(1)->Dump; 您的变量$pid

我的语法是

my $pstree = `pstree -p $pid|wc`;
但是我犯了一个错误

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

有什么想法吗?

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

请看以下内容:

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

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

请看以下内容:

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

它是有效的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;

它是有效的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;

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

my $count = () = qx(pstree -p $pid);
qx()
执行与反勾号相同的操作。空括号将
qx()
放在列表上下文中,这使它返回一个列表,然后在标量上下文中是大小。这是一个快捷方式:

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

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

my $count = () = qx(pstree -p $pid);
qx()
执行与反勾号相同的操作。空括号将
qx()
放在列表上下文中,这使它返回一个列表,然后在标量上下文中是大小。这是一个快捷方式:

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

print Dumper($pid)
可能已经足够了。@jordanm:no,Useqq对于显示不可打印字符很重要
print Dumper($pid)
可能已经足够了。@jordanm:no,Useqq对于显示不可打印字符很重要SWC计数字符、字和行(没有命令开关)wc统计字符、字和行(无命令开关)