在Perl 6 REPL中使用chdir的奇怪(内部?)默认构造函数错误消息

bra*_*nco 1 io runtime-error internals perl6 chdir

我遇到以下错误:

&*chdir('/home/account')   
Run Code Online (Sandbox Code Playgroud)

无法将工作目录更改为"/ home/account":"IO :: Path"的默认构造函数仅接受命名参数

我需要更改什么才能克服此错误?

(我使用的是perl6版本2013.12 Ubuntu 14.04)

Eli*_*sen 8

2013.12是4.5岁.我不建议使用该版本学习Perl 6.请尝试获取更新的版本:它的文档将更新,如果不是2个数量级,它将是一个.

另外,为什么不用chdir而不是&*chdir?后者是古代遗物,afaik.如果你只是chdir,你得到:

$ perl6 -e 'chdir("/home/account")'
Failed to change the working directory to '/home/account': does not exist
Run Code Online (Sandbox Code Playgroud)

这肯定是更容易理解的.

其次,如果chdir失败,则返回a Failure.当a Failure沉没(也称为Perl 5术语中的"void"上下文中)时,它将抛出Exception它包含的内容.这就是你刚刚看到的.

chdirIO::Path如果成功则返回一个对象,在布尔上下文中为True,例如一个if或三元:

$ perl6 -e 'say chdir("/home/account") ?? "Yeah!" !! "Alas"'
Alas
Run Code Online (Sandbox Code Playgroud)

但是在大多数情况下,如果要在目录中执行某些操作,则需要使用indir($ path,{code to execute}).这将确保除了作为第二个参数给出的代码之外,不会在该目录中执行任何代码.

  • @branco:2013.12岁是4.5岁.我不会*建议使用该版本学习Perl 6.请尝试获取更新的版本:它的文档将更新,如果不是2个数量级,它将是一个. (2认同)