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

Perl6:如何查找文件名与模式匹配的所有已安装模块?

发布时间:2020-12-16 06:25:37 所属栏目:大数据 来源:网络整理
导读:在Perl6中是否可以找到文件名与模式匹配的所有已安装模块? 在Perl5中,我会这样写: use File::Spec::Functions qw( catfile );my %installed;for my $dir ( @INC ) { my $glob_pattern = catfile $dir,'App','DBBrowser','DB','*.pm'; map { $installed{$_}
在Perl6中是否可以找到文件名与模式匹配的所有已安装模块?

在Perl5中,我会这样写:

use File::Spec::Functions qw( catfile );

my %installed;
for my $dir ( @INC ) {
    my $glob_pattern = catfile $dir,'App','DBBrowser','DB','*.pm';
    map { $installed{$_}++ } glob $glob_pattern;
}

解决方法

目前无法获取已安装模块的原始文件名.但是可以获取模块名称

sub list-installed {
    my @curs       = $*REPO.repo-chain.grep(*.?prefix.?e);
    my @repo-dirs  = @curs>>.prefix;
    my @dist-dirs  = |@repo-dirs.map(*.child('dist')).grep(*.e);
    my @dist-files = |@dist-dirs.map(*.IO.dir.grep(*.IO.f).Slip);

    my $dists := gather for @dist-files -> $file {
        if try { Distribution.new( |%(from-json($file.IO.slurp)) ) } -> $dist {
            my $cur = @curs.first: {.prefix eq $file.parent.parent}
            take $_ for $dist.hash<provides>.keys;
        }
    }
}

.say for list-installed();

见:Zef::Client.list-installed()

(编辑:李大同)

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

    推荐文章
      热点阅读