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

Io 在Perl 6 REPL中使用chdir时出现奇怪的(内部?)默认构造函数错误消息,io,runtime-error,raku,internals,chdir,Io,Runtime Error,Raku,Internals,Chdir,我面临以下错误: 无法将工作目录更改为“/home/account”:IO::Path”的默认构造函数仅接受命名参数 我需要改变什么来克服这个错误 (我使用的是perl6版本2013.12 Ubuntu 14.04)2013.12已经有4.5年的历史了。我不建议使用该版本学习Perl 6。请尝试获得一个更新的版本:它的文档将更为最新,如果不是2个数量级的话,它将是一个 另外,为什么不使用chdir而不是&*chdir?后者是从古代遗留下来的东西。如果您只是chdir,您会得到: $ perl6

我面临以下错误:

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

我需要改变什么来克服这个错误


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

2013.12已经有4.5年的历史了。我不建议使用该版本学习Perl 6。请尝试获得一个更新的版本:它的文档将更为最新,如果不是2个数量级的话,它将是一个

另外,为什么不使用
chdir
而不是
&*chdir
?后者是从古代遗留下来的东西。如果您只是
chdir
,您会得到:

$ perl6 -e 'chdir("/home/account")'
Failed to change the working directory to '/home/account': does not exist
这显然已经更容易理解了

其次,如果
chdir
失败,它将返回一个
Failure
。当一个
失败
失败时(在Perl 5术语的“void”上下文中调用aka),它将抛出它包含的
异常。这就是你刚才看到的

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

$ perl6 -e 'say chdir("/home/account") ?? "Yeah!" !! "Alas"'
Alas

但在大多数情况下,如果您想在目录中执行某些操作,则需要使用。这将确保除作为第二个参数给出的代码外,不会在该目录中执行任何代码。

请显示生成代码的代码并添加一些详细信息。阅读
&*chdir('/home/account')
如果我先创建dir,它对我来说是有效的;或显示
无法将工作目录更改为“/home/account”:chdir失败:如果我没有更改,则没有此类文件或目录。“Default constructor”消息是一个完全不同的东西,似乎只是附加在错误消息的末尾,这很奇怪。您是否忘记显示您编写的其他代码?即便如此,这看起来也很奇怪。您可能正在使用旧的Perl 6版本。$*PERL.compiler.version显示的是什么?在末尾添加“Default constructor”消息的方式很奇怪。但它变得更奇怪了。在Perl 6中,“默认构造函数”是,它提供了
.new
的默认实现。但是“类可以提供它们自己的新方法来覆盖这个默认值。”——
IO::Path
确实提供了。我猜你的P6很老了,或者你有一些代码没有显示出来,这很奇怪,或者你的系统很奇怪。你能提供你的代码、操作系统版本等的详细信息吗?perl6版本2013.12 Ubuntu 14.04你的编译器已经有4年的历史了,基本上是该编译器和Perl 6语言的预览版。到目前为止,Perl 6语言的第一个也是唯一一个官方版本叫做
6.c
aka
6.Christmas
,是。Rakudo编译器实现了这种
6.c
语言。Rakudo Star是编译器加上一些额外的东西。我强烈建议您下载并安装最近的Rakudo Star。如果这不起作用,那么至少最近的一次拉库多。我的下一条信息将对此提供指导。我开始在Ubuntu上使用perl6作为shell,但我很了解dash和coreutils,所以我想经常使用“shell”命令。当我试图在2013.12版perl6中使用indir时,我得到了“未声明的例程:indir”。我原以为‘indir($*CWD,{shell'pwd'})可以用,但实际上不行。@branco:2013.12已经4.5岁了。我不建议使用该版本学习Perl 6。请尝试获取一个更新的版本:它的文档将更为最新,如果不是2个数量级的话,也将是1个。@ElizabethMattijsen我希望没关系,我将您的评论添加到您的答案中(如果不是,请随时恢复我的编辑)。我正要发布我自己的答案,说布兰科真的只需要安装一个新版本,但你已经说过了。
$ perl6 -e 'say chdir("/home/account") ?? "Yeah!" !! "Alas"'
Alas