我正在做一些与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 */
VS
#define GvCV(gv) (0+GvGP(gv)->gp_cv) /* in Perl 5.14 */
删除它 0+
从定义允许mod_perl 2.0.4成功编译,这很好,因为 0+...
不被认可为 左值 与以前的版本相比。
为什么是 0+
用于GvCV的定义,是否有必要?或者删除它并安排定义是否安全 GvCV(gv)
像以前的Perl版本一样?