【问题标题】:How to determine the absolute path name of the compilation unit of the caller?如何确定调用者编译单元的绝对路径名?
【发布时间】:2019-11-27 13:58:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: raku


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-09
      • 2014-06-27
      • 1970-01-01
      • 2012-05-28
      • 2011-05-09
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多