You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl模块内子函数如何自动获取当前正在运行的主脚本文件名?

Perl模块自动获取主脚本文件名的解决方法

核心逻辑

Perl内置全局特殊变量$0默认存储当前执行的主脚本路径,无需从外部传参即可在模块内直接访问。
你之前代码中使用的__FILE__是Perl字面量,返回的是当前所在代码文件的路径,所以在mwe.pm模块内调用时返回的是模块本身的路径,不符合需求。
另外你之前直接拼接getcwd()和文件路径的写法会出现重复路径、多余斜杠的问题,如果需要统一获取主脚本的绝对路径,直接用Cwd模块的abs_path()方法处理$0即可。

修改后的mwe模块代码

use strict;
use warnings;
use feature 'say';
package mwe;
use Cwd qw(abs_path);
use Exporter qw(import);
# 建议用EXPORT_OK显式导出,避免污染调用方的命名空间
our @EXPORT_OK = qw(tmp);

sub tmp {
    # 直接获取主脚本的绝对路径
    my $main_script_path = abs_path($0);
    say 'written by ' . $main_script_path;
}
1;

调用效果

主脚本的use mwe 'tmp';属于显式导入,不需要修改,运行后输出如下:

con@V:~/Scripts$ perl mwe.pl
written by /home/con/Scripts/mwe.pl

最小示例优化建议

  • 模块开头建议加上use strict; use warnings;,和主脚本保持一致,提前捕获语法问题
  • 除非确定要默认导出所有子函数,否则优先用@EXPORT_OK,要求调用方显式声明要导入的函数,减少命名冲突概率

内容的提问来源于stack exchange,提问作者con

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 17:36:10