如何在perl scipt中运行shell命令并将结果返回到perl脚本中的变量(不将结果返回到unix)

Ste*_*ven 0 unix perl command

可能重复:
如何将Perl的系统函数输出存储到变量中?

我试图在我的perl脚本中运行shell命令.示例如下:

system ("ls -al");
Run Code Online (Sandbox Code Playgroud)

结果很好地打印在unix上.

有没有办法将结果返回到$string我的perl脚本而不是在unix上返回结果.我不希望结果打印在我的unix上.

小智 11

使用反引号:

$string = `ls -al`;
Run Code Online (Sandbox Code Playgroud)

'qx'分隔符是此的同义词:

$string = qx{ls -al};
Run Code Online (Sandbox Code Playgroud)

这是记录在这里在perlop中手册页.

或者,您可以使用'|'打开 像这样:

open my $filehandle, "ls -al|" or die "Open failed!\n";
while(<$filehandle>) {do_something($_);}
close $filehandle;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您将文件句柄打开到附加到命令输出的管道(基本上将输出视为文件).如果命令花费很长时间或产生的输出多于您希望一次存储在内存中,则这很方便.这在perl open手册中有记录.

  • $ var = qx(ls -l 2>&1)也会在$ var ....中给出错误.默认情况下,qx不会捕获stderr.你还应该检查$ @的值,这是程序的退出代码(非零表示它有问题) (2认同)