在 IO::Path 中§
有关例程 dir,请参阅上下文中的主要文档
multi dir(*)multi dir(IO::Path , |c)multi dir(IO() , |c)method dir(IO::Path: Mu : = .curupdir)
返回一个惰性列表,其中包含与目录中的条目对应的 IO::Path
对象,这些条目可以选择通过按其名称(作为字符串)进行智能匹配来过滤,具体取决于 :test
参数。文件系统返回条目的顺序决定了列表中条目/对象顺序。不包括对应于特殊目录条目 .
和 ..
的对象。$path
决定了对象的路径是绝对路径还是相对路径。
由于测试是针对Str
参数执行的,而不是IO
,因此测试是在 $*CWD
中执行的,而不是在目标目录中执行的。在针对文件测试运算符进行测试时,这将不起作用
dir('mydir', test => )
而这将起作用
dir('mydir', test => )
注意:dir
调用会打开一个目录以供读取,这会算入程序的最大每个进程打开文件数。在执行诸如递归执行更多 dir
调用之类的操作之前,请务必用尽返回的Seq
。你可以通过赋值给一个 @-
符号变量或简单地对其进行循环来用尽它。请注意,下面的示例是如何将要查看的进一步目录推送到Array
中,而不是立即对它们调用 dir
。另请参阅IO::Dir
模块,它可以让你更精细地控制关闭目录句柄。
示例
# To iterate over the contents of the current directory:for dir() -># As before, but include even '.' and '..' which are filtered out by# the default :test matcher:for dir(test => *) -># To get the names of all .jpg and .jpeg files in the home directory of the current user:my = .dir: test => /:i '.' jpe?g $/;
列出所有文件和目录(递归)的示例程序
sub MAIN( = '.')
一种惰性方式,从当前目录开始递归查找以 “.raku” 结尾的前三个文件
my = '.'.IO;my = gather while.put for [^3];