我想按名称对目录中的文件进行排序/打印.我的代码列出了所有代码,但排序是偏斜的.这是我的代码和结果.任何建议都将受到欢迎!
my $file;
opendir (DIR, "$dir");
while ($file = readdir(DIR)) {
push (my @files, $file);
@files = sort {$a cmp $b} @files; #NOT sorting!
foreach $file (@files) {
print "$file\n";
}
}
Run Code Online (Sandbox Code Playgroud)
以下是"排序"结果:
Screenshot-Chess_-_Human_versus_GNUchess.png
test.html
katyperry.gif
test.cgi
Californication.S04E05.HDTV.XviD-ASAP.avi
FreeWatch_13.exe
proxy.jpg
test.pl-
.
attachment2.jpg
attachment.jpg
Californication.S04E06.HDTV.XviD-LOL.avi
Californication.S04E07.HDTV.XviD-LOL.avi
boxter.jpg
..
Run Code Online (Sandbox Code Playgroud)
Ano*_*mie 11
您正在构建一系列单元素列表,对每个列表进行排序(这是一个无操作)并打印它.你想要做的是将整个文件列表读入一个列表,然后对其进行排序,如下所示:
my $file;
my @files;
opendir (DIR, "$dir");
while ($file = readdir(DIR)) {
push (@files, $file);
}
@files = sort {$a cmp $b} @files;
foreach $file (@files) {
print "$file\n";
}
Run Code Online (Sandbox Code Playgroud)
另一种方法,使用File :: Slurp
use warnings;
use strict;
use File::Slurp;
use Data::Dumper;
my @files = read_dir($dir);
@files = sort @files;
print Dumper(\@files);
Run Code Online (Sandbox Code Playgroud)
这将负责打开和关闭目录,检查是否成功,并自动排除特殊.和...目录,你可能不想要.