Win32 Perl – 使用传递的目录参数讲述文件和文件夹之间的区别

我正在用perl草莓写一个脚本.它需要做的第一件事是获取路径参数并获取该路径的目录列表,它需要能够区分文件和文件夹.我阅读了一些关于这个主题的教程并编写了下面的脚本,但只有当我给它脚本当前所在的路径时它才有效.如果我给它任何其他路径,-f和-d测试不起作用.

编辑:澄清:脚本将所有文件和文件夹放入@thefiles如果我给它一个不是它自己的路径,它只是-f和-d测试不起作用.

use Getopt::Long;

my $dir;

GetOptions('-d=s' => \$dir);

opendir(DIR, $dir) or die "BORKED";
@thefiles = readdir(DIR);
print DIR;
closedir(DIR);

@filez;
@dirz;

foreach $file (@thefiles){
 if (-f$file){
  push(@filez, $file);
 }
 if (-d$file){
  push(@dirz, $file);
 }
}

print "files: @filez \n";
print "Directories: @dirz \n";

这是截图:http://i.stack.imgur.com/RMmFz.jpg

希望有人可以提供帮助,非常感谢您的时间. 🙂

最佳答案 马丁克莱顿告诉你你的代码不起作用的原因.

这是一种使用map和一些更现代的Perl构造来修复它的方法:

use strict; 
use warnings; 
use Getopt::Long; 

my $dir; 

GetOptions('-d=s' => \$dir); 

opendir my $dh, $dir or die "BORKED: $!";
my @thefiles = map { "$dir/$_" } readdir $dh;
closedir $dh;

my @filez; 
my @dirz; 

for my $file (@thefiles) { 
    push @filez, $file if -f $file;
    push @dirz , $file if -d $file;
} 

print "files: @filez \n"; 
print "Directories: @dirz \n"; 
点赞