在独立例程中§
请参阅主要文档 上下文中的sub indir
sub indir(IO() , , : = True, :, :, :)
获取 Callable
&code
并执行它,在本地(到 &code
)将 $*CWD
变量更改为基于 $path
的 IO::Path
对象后,可以选择确保新路径通过多个文件测试。如果 $path
是相对的,它将被转换为绝对路径,即使给出了 IO::Path
对象。注意:此例程不会更改进程的当前目录(请参阅 &*chdir
)。&code
之外的 $*CWD
不会受到影响,即使 &code
明确为 $*CWD
分配了一个新值。请记住,延迟评估的内容最终可能不会在实际评估时让 indir
在其动态范围内设置 $*CWD
。确保生成器设置了它们的 $*CWD
,或在从 indir
返回结果之前急切地评估它们。
成功时返回 &code
调用返回的值。如果无法成功更改 $*CWD
,则返回 Failure
。警告:请记住,延迟评估的内容最终可能不会在实际评估时让 indir
在其动态范围内设置 $*CWD
。确保生成器设置了它们的 $*CWD
,或在从 indir
返回结果之前急切地评估它们。
say indir("/tmp",)».CWD; # OUTPUT: «(/home/camelia)»say indir("/tmp",)».CWD; # OUTPUT: «(/tmp)»say indir("/tmp",)».CWD; # OUTPUT: «(/tmp)»
该例程的 $path
参数可以是任何具有返回 IO::Path
对象的 IO 方法的对象。可用的文件测试是
默认情况下,仅执行 :d
测试。
say ; # OUTPUT: «"/home/camelia".IO»indir '/tmp', ; # OUTPUT: «"/tmp".IO»say ; # OUTPUT: «"/home/camelia".IO»indir '/not-there', ; # returns Failure; path does not exist