我正在编写一个程序来逐步遍历目录树(是的,我知道 File::Find,但我正在编写一个替代品)。
在我的程序中,我正在readdir
对整个目录进行操作并将其放在列表中。我需要做两件事:
- 从列表中删除
.
和..
- 在每个文件上添加当前目录名称。
我可以用循环来做到这一点,或者我可以使用map
and grep
:
# Map and Grep
my @dir_stack = readdir $dir_fh;;
@dir_stack = grep { !/^\.{1,2}$/ } @dir_stack;
@dir_stack = reverse map { "$cwd/$_" } @dir_stack;
push @stack, @dir_stack;
# Read Loop
opendir $dir_fh, $cwd;
my @dir_stack;
foreach my $file (readdir $dir_fh) {
next if $file =~ /^\.{1,2}$/; #Skip "." and ".."
unshift @dir_stack, "$cwd/$file";
}
push @stack, @dir_stack;
结合grep
and怎么样map
?
opendir $dir_fh, $cwd;
my @dir_stack = readdir $dir_fh;;
@dir_stack = grep { !/^\.{1,2}$/ && {$_ = "$cwd/$_"} } @dir_stack;
push @stack, reverse @dir_stack;
我希望下周当我查看代码并试图弄清楚发生了什么时,我的代码是可读的。我还需要我的代码高效。