raku - 如何确定调用者编译单元的绝对路径名?
问题描述
文件
替换为
$?FILE
which 略有不同__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
如何获取调用者编译单元的绝对路径名?
解决方案
你看过IO::Path中的绝对方法吗?
say "func: Calling package's file name: ", $frame.file.IO.absolute;
推荐阅读
- javascript - 如何检查条件数组中的值?
- swift - 存储在 CoreData 中的应用内购买回调函数
- javascript - 对于控制台中的相等字符串,javascript 字符串比较不返回 true [已解决]
- excel - 如何正确地将 VBA 引用添加到适用于 Windows 和 macOS 的 VBA 加载项
- python - 从 API 接收的 django 问题
- java - 无法执行 buildtool jar 文件以从 abb 文件中提取 apk
- ios - 当前位置总是 00000.00, 00000.00
- python - 'ListingGenerator' 对象不可使用 ASYNCPRAW 进行迭代
- r - 如何在 dplyr::across() 中使用 n() 按组计算行数?
- ios - 无法通过 UIimageView 的锚点错误激活约束