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

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


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
$
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?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/e806c537/attachment-0001.bin>


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