文件
由
$?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
如何获取调用者的编译单元的绝对路径名?
答案 0 :(得分:5)
您是否通过IO :: Path看过https://jsfiddle.net/mbc59e38/?
say "func: Calling package's file name: ", $frame.file.IO.absolute;