Estoy haciendo un tipo de investigación relacionada con la compatibilidad de mod_perl-Apache-Perl. Recientemente traté de construir mod_perl 2.0.4 usando Perl 5.14.2. La fase de compilación se terminó prematuramente con un error:¿Por qué Perl 5.14 usa la definición (0 + GvGP (gv) -> gp_cv) para GvGC?
modperl_perl.c: In function ‘modperl_perl_core_global_init’:
modperl_perl.c:58:9: error: lvalue required as left operand of assignment
En este lugar el siguiente código está escrito:
GvCV(gv) = get_cv(cglobals->sub_name, TRUE);
búsqueda de lo que podría generar este error, he encontrado una diferencia entre las versiones anteriores de Perl y 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 */
La eliminación de este 0+
de la definición permite mod_perl 2.0.4 a ser compilado con éxito, y esto está bien porque 0+...
no se reconoce como un valor- en comparación con las versiones anteriores.
¿Por qué se usa 0+
en la definición de GvCV y es necesario? ¿o es seguro eliminarlo y tener la definición de GvCV(gv)
como en versiones anteriores de Perl?
1 pregunta bien investigado. – pilcrow