如何确定调用者的编译单元的绝对路径名?

Håk*_*and 5 perl6 raku

根据p6doc 5to6-perlfunc

文件

替换$?FILE__FILE__与之稍有不同的地方在于,它始终是绝对路径,而不是Perl 5情况下的相对路径

并根据p6doc CallFrame

没有参数,callframe它将为您提供行调用的框架信息callframe。的文件和行注释将是相同的那些$?FILE$?LINE

但是,当我对此进行测试时,该file属性给出了一个相对路径名:

./p.p6

use v6;
use Data::Dump::Tree;

use lib '.';
use MyModule;

say 'Main script: package path name     : ', $?FILE;
say 'Main script: $*PROGRAM-NAME        : ', $*PROGRAM-NAME;
MyModule::func();
Run Code Online (Sandbox Code Playgroud)

./MyModule.pm6

unit module MyModule;

our sub func() {
    say "func: This package path name     : ", $?FILE;
    my $frame = callframe 1;
    say "func: Calling package's file name: ", $frame.file;
}
Run Code Online (Sandbox Code Playgroud)

输出

Main script: package path name     : /home/hakon/test/perl6/./p.p6
Main script: $*PROGRAM-NAME        : ./p.p6
func: This package path name     : /home/hakon/test/perl6/MyModule.pm6 (MyModule)
func: Calling package's file name: ./p.p6
Run Code Online (Sandbox Code Playgroud)

如何获得调用者的编译单元的绝对路径名?

Val*_*kas 5

您是否看过IO :: Path 的绝对方法

say "func: Calling package's file name: ", $frame.file.IO.absolute;