在Perl中将“ls”命令捕获到数组中

我需要将ls命令的输出捕获到一个数组中。我试过这样的事情:

use strict;
use warnings;
use diagnostics;

use feature 'say';

use feature "switch";

my $a= system("ls  /media");
my @words = split / /, $a;
my $name = $words[0];
my $name2 = $words[1];
say $name;

但是,它不仅输出与 相同的字符串$a,而且仅限于 2 个元素。有任何想法吗?

回答

系统返回退出状态,而不是命令的输出。使用反引号、qx{}或readpipe获取输出:

# The following lines are equivalent.
my @lines = `ls`;
my @lines = qx{ ls };
my @lines = readpipe 'ls';

要获取目录的内容,通常更安全(文件名可以包含空格和换行符)且运行速度更快(无需脱壳)

my @files = glob '*';

或者

opendir my $dir, "/path/to/dir" or die $!;
my @files = readdir $dir;

永远不要使用my $a. $a是sort 中使用的特殊变量,词法化它可能会阻止sort工作。


以上是在Perl中将“ls”命令捕获到数组中的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>