在perl中执行命令时使用管道

ana*_*and 2 perl pipe

我试图在perl中使用以下命令,但它给了我错误

system("zcat myfile.gz | wc > abc.txt");
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个时,我收到意外令牌附近的错误语法错误`|'

即使我删除>abc.txt我仍然会收到错误.

我们可以使用管道系统命令吗?

以下是错误详细信息:

sh: -c: line 1: syntax error near unexpected token `|'
sh: -c: line 1: ` | wc '
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 5

下一次,测试您的演示程序,以确保它实际上展示了您所说的行为.你实际上跑得更近了

while (my $file_name = <>) {
   system("zcat $file_name | wc > abc.txt");
}
Run Code Online (Sandbox Code Playgroud)

有两个错误:

解:

use String::ShellQuote qw( shell_quote );

while (my $file_name = <>) {
   chomp($file_name);
   system("zcat -- ".shell_quote($file_name)." | wc > abc.txt");
}
Run Code Online (Sandbox Code Playgroud)