Alias 2.32模块在macOS的Perl 5.36.1环境下编译失败求助
修复Alias 2.32在Perl 5.36.1下的编译错误
问题根源
Perl 5.36对内部宏做了安全性调整,GvCV()宏从返回可修改的左值指针,改为返回只读的右值指针。这直接导致原代码里的两个操作失效:
- 无法对
GvCV(gv)取地址传给SAVESPTR - 无法直接对
GvCV(gv)赋值
修复代码
找到Alias.xs文件中SVt_PVCV分支的代码,替换为以下内容:
case SVt_PVCV: { // 改用GvCVp获取指向CV指针的可修改引用 CV **cv_ptr = GvCVp(gv); SAVESPTR(*cv_ptr); *cv_ptr = Null(CV*); } break;
代码说明
GvCVp(gv)返回CV**类型(指向GV内部CV指针的指针),是Perl 5.36推荐的用于修改GV中CV指针的方式- 通过解引用
*cv_ptr获取原CV指针,传给SAVESPTR完成保存操作 - 再通过
*cv_ptr赋值,将GV内部的CV指针设置为Null
编译安装修改后的模块
- 解压Alias 2.32的源码包
- 编辑
Alias.xs完成上述修改 - 执行以下命令完成编译安装:
perl Makefile.PL make make test make install
内容的提问来源于stack exchange,提问作者perlboy
相关产品推荐
相关产品推荐

