加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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;

反向的需要相当奇怪,而且这里隐藏起来比隐藏更加明显,所以这是另一个奖励.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读