我正在做一些与 mod_perl-Apache-Perl 兼容性相关的研究。最近我尝试使用 Perl 5.14.2 构建 mod_perl 2.0.4。编译阶段因错误而提前终止:
modperl_perl.c: In function ‘modperl_perl_core_global_init’:
modperl_perl.c:58:9: error: lvalue required as left operand of assignment
在这个地方编写了以下代码:
GvCV(gv) = get_cv(cglobals->sub_name, TRUE);
搜索可能产生此错误的原因,我发现 Perl 和 Perl 5.14 (CORE/gv.h) 的早期版本之间存在差异:
#define GvCV(gv) (GvGP(gv)->gp_cv) /* previous versions */
对比
#define GvCV(gv) (0+GvGP(gv)->gp_cv) /* in Perl 5.14 */
从定义中删除它0+
允许 mod_perl 2.0.4 成功编译,这很好,因为与以前的版本相比, 0+...
它不被识别为左值。
为什么0+
在 GvCV 的定义中使用,是否有必要?或者删除它并GvCV(gv)
在以前的 Perl 版本中定义 like 是否安全?