私はmod_perl-Apache-Perlの互換性に関連するある種の調査を行っています。最近、Perl5.14.2を使用してmod_perl2.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+...
として認識されないため、問題ありません。
GvCVの定義で使用されるのはなぜ0+
ですか?それは必要ですか?GvCV(gv)
または、それを削除して、以前のバージョンのPerlのように定義しても安全ですか?