我一直在尝试从Perl5学习Perl6,但问题是正则表达式的工作方式不同,而且工作不正常.
我正在制作一个测试用例,列出以".p6 $"结尾的目录中的所有文件
此代码适用于结束字符
if 'read.p6' ~~ /read\.p6$/ {
say "'read.p6' contains 'p6'";
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将其放入子例程中:
multi list_files_regex (Str $regex) {
my @files = dir;
for @files -> $file {
if $file.path ~~ /$regex/ {
say $file.path;
}
}
}
Run Code Online (Sandbox Code Playgroud)
它不再有效.我不认为正则表达式的问题,但与文件名,可能有一些我不知道的属性.
如何获取文件名以匹配Perl6中的正则表达式?
Regexes是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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |