gpt4 book ai didi

raku - Perl6 正则表达式与文件名不匹配结束 $ 字符

转载 作者:行者123 更新时间:2023-12-04 17:29:59 27 4
gpt4 key购买 nike

我一直在尝试从 Perl5 学习 Perl6,但问题是正则表达式的工作方式不同,并且无法正常工作。

我正在制作一个测试用例来列出以“.p6$”结尾的目录中的所有文件

此代码适用于结束字符

if 'read.p6' ~~ /read\.p6$/ {
say "'read.p6' contains 'p6'";
}

但是,如果我尝试将其放入子程序中:
multi list_files_regex (Str $regex) {
my @files = dir;
for @files -> $file {
if $file.path ~~ /$regex/ {
say $file.path;
}
}
}

它不再起作用。我不认为正则表达式的问题,但对于文件名,可能有一些我不知道的属性。

如何获取文件名以匹配 Perl6 中的正则表达式?

最佳答案

正则表达式是 Perl 6 中的一流语言,而不仅仅是字符串,您在此处看到的就是它的结果。

表格 /$foo/在 Perl 6 正则表达式中将搜索 $foo 中的字符串值,所以它会从字面上寻找字符 read\.p6$ (即,带有点和美元符号)。

根据调用代码的情况,有几个选项:

  • 如果您确实以字符串形式接收正则表达式,例如作为输入或从文件中读取,则使用 $file.path ~~ /<$regex>/ .这意味着它将处理 $regex 中的内容作为正则表达式语法。
  • 如果您只想传入一系列不同的正则表达式,请将参数更改为类型 Regex ,然后做 $file.path ~~ $regex .在这种情况下,您可以像 list_files_regex(/foo/) 一样传递它们.

  • 最后但并非最不重要的是, dir需要一个 test参数,因此您可以改为编写:
    for dir(test => /<$regex>/) -> $file {
    say $file.path;
    }

    关于raku - Perl6 正则表达式与文件名不匹配结束 $ 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54082682/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com