Как определить абсолютный путь к имени модуля компиляции вызывающей стороны? - PullRequest
5 голосов
/ 17 апреля 2019

Согласно p6doc 5to6-perlfunc:

FILE

Заменено на $?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();

. / 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 Ответ

5 голосов
/ 17 апреля 2019

Вы смотрели на абсолютный метод из IO :: Path?

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

...