2012-05-12 5 views
11

Mod_perl-Apache-Perl uyumluluğu ile ilgili bir tür araştırma yapıyorum. Son zamanlarda Perl 5.14.2 kullanarak mod_perl 2.0.4 oluşturmaya çalıştım.Neden GvGC için Perl 5.14 (0 + GvGP (gv) -> gp_cv) kullan?

modperl_perl.c: In function ‘modperl_perl_core_global_init’: 
modperl_perl.c:58:9: error: lvalue required as left operand of assignment 

bu yerde şu kod yazılır: derleme aşaması bir hata ile durdurulduğunda bu hata ne olabilir aranıyor

GvCV(gv) = get_cv(cglobals->sub_name, TRUE); 

ben önceki sürümleri arasında bir fark bulduk Perl ve Perl 5.14 (çekirdek/gv.h):

#define GvCV(gv) (GvGP(gv)->gp_cv) /* previous versions */ 

vs

tanımından bu 0+ Çıkarma

mod_perl 2.0.4 başarı ile derlenmiş sağlar ve 0+... önceki sürümlere kıyasla bir lvalue olarak kabul edilmez çünkü bu iyi.

Neden 0+ GvCV tanımında kullanılır ve gereklidir? ya da kaldırmak ve bu Perl önceki sürümlerinde olduğu gibi GvCV(gv) tanımı var mı?

+2

1 iyi araştırılmış soru. – pilcrow

cevap

12

Bu değişikliği zorlayan taahhüt this one.

Kısa günlüğü:

add GvCV_set() and GvGP_set() macros.

and make GvCV() and GvGP() rvalue-only.

This it to allow a future commit to eliminate some backref magic between GV and CVs, which will require complete control over assignment to the gp_cv slot.

Böylece 0+ amacı bu makro SağDeğerler yapmak tam da budur. Kodunu yeni semantiklerle eşleştirmek için mod_perl beklemekten daha iyi olursunuz, çünkü thos makrolarının geri alınması bir noktada geçersiz olur. (Yani "gelecek kesinleştirme" zaten uygulanan olup olmadığını bilmiyorum.)

İlgili tartışma: http://www.nntp.perl.org/group/perl.perl5.porters/2011/01/msg167682.html

+2

Yani, bu '0 +' önek CV'lerin * lvalues ​​* olarak kullanımını ortadan kaldırmak ve geliştiricilerin 'GvCV_set()' kullanmasını sağlamak için eklenmiştir. Ve bu 0 + 'önekini kaldırmak güvenli değil. Doğru anladım mı? mod_perl hakkında: Perl 5.14 ile başarılı bir şekilde derleyen yeni sürümleri var (sadece baktı, 'GvCV_set()' kullanılır); 2.0.4 eski bir. Bence cevabın beklediğim kadar yakın. Teşekkürler. – ArtM

+0

Evet, bu nasıl şeyler anlıyor. – Mat

+0

@ArtM, Evet, tam olarak bu. – ikegami

İlgili konular