我们如何在Perl 6中使用与OS无关的路径?

时间:2019-09-04 06:53:10

标签: windows raku

Perl 6确实具有包含用于指定路径的common OSs和包含文件规范的$*SPEC的类。 New paths默认使用SPEC的当前值。但是,从文档中还不清楚是否做类似

的操作
mkdir IO::Path.new( 'a/b/c' );

将在所有操作系统上正常工作,或者您需要专门创建与操作系统相关的代码。有想法吗?

2 个答案:

答案 0 :(得分:8)

我正在Windows 7(根据标签似乎是您最感兴趣的操作系统之一)上使用

This is Rakudo Star version 2019.03.1 built on MoarVM version 2019.03
implementing Perl 6.d.

它看起来像那样工作

> with mkdir IO::Path.new('a/b/c') { say .e; say .absolute }
True
C:\rakudo\a\b\c

目录确实创建正确。

请注意,IO::Path在其构造函数中采用一个默认为IO::Spec的{​​{1}}对象,因此该对象可以使用与OS相关的必需部分。在Rakudo中,mkdir.absolute确实使用了$*SPEC。 在Windows中,由IO::Spec变成/的{​​{1}}中还有一个roast test

正如Elizabeth Mattijsen指出的那样,Windows似乎仅支持正斜杠本身。其他人则声称forever就是这种情况:

  

实际上,Windows的每个版本以及2.0以后的MS-DOS的每个版本都接受“ /”作为路径定界符。

答案 1 :(得分:4)

在Windows 10企业VM上:

C:\Users\me>c:/rakudo/bin/perl6 -e "mkdir IO::Path.new( 'a/b/c' )"

C:\Users\me>tree a
Folder PATH listing
Volume serial number is xxx
C:\USERS\ME\A
└───b
    └───c