ディレクトリ ツリーをステップ実行するプログラムを作成しています (はい、File::Find については知っていますが、代わりのプログラムを作成しています)。
私のプログラムでは、readdir
ディレクトリ全体に対して実行し、それをリストに配置しています。私は2つのことをする必要があります:
.
と..
をリストから削除する- 各ファイルの現在のディレクトリ名を先頭に追加します。
ループでこれを行うことも、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
との組み合わせはどうmap
ですか?
opendir $dir_fh, $cwd;
my @dir_stack = readdir $dir_fh;;
@dir_stack = grep { !/^\.{1,2}$/ && {$_ = "$cwd/$_"} } @dir_stack;
push @stack, reverse @dir_stack;
来週、コードを見て何が起こっているのかを理解しようとするときに、コードを読みやすくしたいと思っています。コードを効率的にする必要もあります。