On Wed, Dec 08, 2004 at 08:12:12AM +0300, Alexey I. Froloff wrote: > Кстати, а такая проблема в новом r-b-p решена? > > use constant MP2 => $mod_perl::VERSION >= 1.99; > > BEGIN { > my @constants = qw( OK AUTH_REQUIRED FORBIDDEN DECLINED SERVER_ERROR ); > if (MP2) { > require Apache::Const; > import Apache::Const @constants; > } > else { > require Apache::Constants; > import Apache::Constants @constants; > } > } > > После чего в Requires попадают и Apache::Const и > Apache::Constants. Это perl-Apache-DBI 0.94, собирал сам для > 2.2. Думаю, что решена, т.к. константные функции с пустым прототипом подставляются на стадии компиляции (perlsub/Constant Functions), а потом по дереву проходится оптимизатор (perlguts/constant folding). $ perl -MO=Concise,-terse -e 'sub true(){1} if(true){require "asdf"} else{require "zxcv"}' LISTOP (0x80662c0) leave [1] OP (0x804fc88) enter COP (0x80661e0) nextstate LISTOP (0x8066420) scope OP (0x804fce0) null [174] UNOP (0x80663c8) require SVOP (0x80662f8) const [1] PV (0x80643f0) "asdf" -e syntax OK $ $ echo "$ТВОЙ_КОД" >mp2.pl $ perl.req --verbose mp2.pl # perl(constant.pm) at line 1 # perl(Apache/Constants.pm) at line 10 mp2.pl syntax OK perl(Apache/Constants.pm) perl(constant.pm) $ По-видимому, эта проблема уже с B::Deparse была решена: $ perl -MO=Deparse mp2.pl use constant ('MP2', $mod_perl::VERSION >= 1.99); sub BEGIN { my(@constants) = ('OK', 'AUTH_REQUIRED', 'FORBIDDEN', 'DECLINED', 'SERVER_ERROR'); do { require Apache::Constants; 'Apache::Constants'->import(@constants) }; } mp2.pl syntax OK $