[devel] Re: I: rpm-build-perl-0.5

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Ср Дек 8 09:53:27 MSK 2004


On Wed, Dec 08, 2004 at 09:12:07AM +0300, Alexey Tourbin wrote:
> 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
> $

Иными словами, если в том коде, который ты привёл, только чуть выше,
есть "use mod_perl;", то результат будет зависеть от версии mod_perl'а
в сборочной среде.  Иначе результат всегда будет по ветке else, т.к.
$mod_perl::VERSION даёт undef и undef >= 1.99 даёт false.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20041208/350c1106/attachment-0001.bin>


Подробная информация о списке рассылки Devel