【问题标题】:Perl6: How to find all installed modules whose filename matches a pattern?Perl6:如何查找文件名与模式匹配的所有已安装模块?
【发布时间】:2016-05-20 15:57:42
【问题描述】:

是否可以在 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;
}

【问题讨论】:

    标签: module raku


    【解决方案1】:

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

    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()

    【讨论】:

    • 注意有一个PR允许保留原始文件名,所以将来可能rakudo PR#729
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    相关资源
    最近更新 更多