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

时间:2019-04-17 19:26:31

标签: perl6

根据p6doc 5to6-perlfunc

  

文件

     

$?FILE代替,与__FILE__稍有不同   它始终是绝对路径,而不是Perl中的相对路径   5例。

并根据p6doc CallFrame

  

不带任何参数的callframe将为您提供框架信息   呼叫callframe的行。文件和行注释将是   与$?FILE$?LINE中的相同。

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

./ p.p​​6

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();

./ 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;
}

输出

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

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

1 个答案:

答案 0 :(得分:5)

您是否通过IO :: Path看过https://jsfiddle.net/mbc59e38/

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