Perl:使用Loop还是Map / Grep?
发布时间:2020-12-15 21:46:46 所属栏目:大数据 来源:网络整理
导读:我正在编写一个程序来逐步浏览一个目录树(是的,我知道File :: Find,但我正在编写一个替代品). 在我的程序中,我正在整个目录上执行readdir并将其放在列表中.我需要做两件事: 删除.和..从列表中 在每个文件上添加当前目录名称. 我可以用循环来做,或者我可以使
我正在编写一个程序来逐步浏览一个目录树(是的,我知道File :: Find,但我正在编写一个替代品).
在我的程序中,我正在整个目录上执行readdir并将其放在列表中.我需要做两件事: >删除.和..从列表中 我可以用循环来做,或者我可以使用map和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; 我想让我的代码下周可读,当我看到它并试图弄清楚发生了什么.我还需要我的代码才能有效. 解决方法
在grep中修改$_?呸!使用anon哈希构造函数有什么用?
@dir_stack = grep { !/^.{1,2}$/ && {$_ = "$cwd/$_"} } @dir_stack; 应该 @dir_stack = map { /^..?z/ ? () : "$cwd/$_" } @dir_stack; 但我个人觉得使用map和grep比组合它们更具可读性. push @stack,reverse map "$cwd/$_",grep !/^..?z/,readdir $dh; 反向的需要相当奇怪,而且这里隐藏起来比隐藏更加明显,所以这是另一个奖励. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |