在独立例程中§
请参阅主要文档 上下文中的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