我正在尝试使用此功能列出目录中的所有文件:
sub list-directory($dir = '.') {
my @todo = $dir.IO.dir;
@todo = @todo.duckmap( -> $_ where $_.d { @todo.push($_.IO.dir); } );
@todo = @todo.duckmap( -> $_ where IO {.Str} );
return @todo;
}
第一个duckmap是列出所有子目录,第二个(尚未完成)是将IO对象转换为Str。
有人知道第二个为什么不停止吗?
答案 0 :(得分:5)
正如Hakon所说,这是一个无限循环。这是固定的代码:
sub list-directory($dir = '.') {
my @todo = $dir.IO.dir;
@todo = @todo.duckmap( -> $_ where $_.d { @todo.push($_.IO.dir); $_; } );
grep { !.IO.d }, @todo.List.flat;
@todo.map({.Str});
}