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

问题描述 投票:5回答:1

p6doc 5to6-perlfunc说:

文件

$?FILE取代,与__FILE__略有不同,因为它始终是绝对路径,而不是Perl 5案例中的相对路径。

并根据p6doc CallFrame

没有参数,callframe将为您提供调用callframe的行的帧信息。文件和行注释将与$?FILE$?LINE中的相同。

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

./怕.怕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();

./my module.屏幕6:

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

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

perl6
1个回答
5
投票

你看过IO :: Path的absolute method吗?

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

© www.soinside.com 2019 - 2024. All rights reserved.