如何在Perl 6中获取符号链接的目标?

9
你可以在Perl 6中创建符号链接:
my $symlink-path = ...;
$target.symlink: $symlink-path;

仅有符号链接,如何获取目标路径?

$symlink-path.IO.????

我正在寻找确切的字符串目标,而不是任何对其进行解释的内容(例如.resolve)。

2个回答

5

据我所知,Perl 6中没有相应的解决方案。

最接近的解决方法是使用zef install P5readlinkhttps://modules.raku.org/dist/P5readlink),并像在Perl 5中一样使用readlink


3

方法resolve的作用:

 my $target       = "../tmp/file".IO; 
 my $symlink-path = "files".IO;
 $target.symlink: $symlink-path;

 say $symlink-path.resolve;
 say $symlink-path.resolve(:completely) ~~ $target.resolve(:completely);

我想要目标,而不是解释后的目标字符串。请注意,:completely 要求目标存在,但符号链接并没有这个要求。此外,即使您的程序中没有其中一个组件,这也必须能够正常工作。 - brian d foy
1
resolve返回一个IO.Path对象,表示目标,而不是您在OP中请求的字符串。 :completely不需要目标存在。它会尽可能地解决,但最终会抛出异常,因为您不能将IO :: Path的对象与实际不存在的对象进行比较。 - jjmerelo
1
@jjmerelo 据我所知,当目标存在时,.resolve 可以在符号链接和目标上工作并产生相同的路径。但是当您没有对目标的引用 它不存在于文件系统中时,当前的 .resolve 无法帮助您。当指定 :completely 时抛出异常仅包括 .resolve 调用者,即原始符号链接路径,在异常有效负载中。如果它还提供了它成功解析的部分和失败的部分,那就更好了。但是 Brian 表示这仍然不能满足他的使用情况。(Lizmat 的 P5readlink 看起来是一个不错的替代方案。) - raiph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接