在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工作。