Perl - 目录中存在从数组检查文件

时间:2016-01-31 19:34:48

标签: perl

我正在尝试使用数组将Linux中的ls命令的内容输出到命令行。我遇到的唯一问题是,当使用if语句查看文件时,它似乎只搜索脚本的PWD而不是指定的路径。

现在我的代码看起来像这样:

my $directory = $ARGV[0];
chomp (my @files = `ls -a $directory`);
my @plainfiles;
my @directories;
if (-f $_) {
    push (@plainflies, $_);
}
elsif (-d $_) {
    push (@directories, $_);
}

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您必须检查"$directory/$_"而不是$_

其次,File :: Slurp :: read_dir()可以为您完成相同的工作而无需调用外部命令,也可以过滤掉"。"," .."等。File::Slurp查看详细信息。

答案 1 :(得分:2)

ls directory返回目录中的文件,即文件名,而不是前缀为目录名的文件名。除了使用shell命令获取文件的内容之外,这只是矫枉过正。尝试使用opendir和readdir以及map来获取前缀为目录的文件:

 opendir(my $dh,$directory);
 my @files = map { "$directory/$_" } grep { !m{^\.\.?$} } readdir($dh);

或者您可以使用glob来匹配特定文件(例如在这种情况下没有以“。”开头的文件):

 my @files = glob("$directory/*");