Ich mache eine Art von Forschung in Bezug auf mod_perl-Apache-Perl-Kompatibilität. Kürzlich habe ich versucht, mod_perl 2.0.4 mit Perl 5.14.2 zu erstellen. Die Kompilation Phase wurde vorzeitig mit einem Fehler abgebrochen:Warum verwendet Perl 5.14 die Definition von (0 + GvGP (gv) -> gp_cv) für GvGC?
modperl_perl.c: In function ‘modperl_perl_core_global_init’:
modperl_perl.c:58:9: error: lvalue required as left operand of assignment
In diesem Ort der folgende Code geschrieben:
GvCV(gv) = get_cv(cglobals->sub_name, TRUE);
Suche nach was diesen Fehler erzeugen könnte, habe ich einen Unterschied zwischen früheren Versionen von gefunden Perl und 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 */
diesen 0+
aus der Definition Entfernen ermöglicht 2.0.4 mod_perl erfolgreich kompiliert werden, und das ist in Ordnung, weil 0+...
als lvalue nicht erkannt wird im Vergleich zu früheren Versionen.
Warum wird 0+
in der Definition von GvCV verwendet und ist es notwendig? oder ist es sicher, es zu entfernen und die Definition von GvCV(gv)
wie in früheren Versionen von Perl zu haben?
+1 gut recherchiert Frage. – pilcrow