Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > GLOB ссылка на код


Автор: gcc 10.2.2010, 14:24
Код

$if = "if";

$t = 1;


$if ($t eq 1) {
   print '1';
}




подскажите, как заставить работать примерно такой код? есть ли аналоги готовые модули для такой реализации?

я хотел сделать триггеры на логике unless  if else eslif для того чтобы в виде абстрации (в виде структуры) (в виде параллельного программирования) отправить данные в класс и чтобы там выполнились некоторые логический действия...


например это ($t eq 1)  какой-то метод класса...

т.е. чтобы не выполнять одно и тоже, например вот участок кода который у меня все время выполнятеся
Код


            if (
                (
                     (  $c->user_exists()
                    && $_->{id_un} == $c->user->{user}->{id}
                    && $_->{created} > time - MyApp->config->{comment}->{edit_limit}

                            ||                            
                        
                        !$c->user_exists()
                        && $_->{id_un} == 0
                            && $_->{ip} && $c->request->address && $_->{ip} eq $c->request->address 
                    && $_->{created} > time - MyApp->config->{comment}->{edit_limit_guest} )                                                
                    
                    && $loop_data2->{close_co} != 1
                )
                || $c->check_user_roles('moder_co')
              )
            {

                #  print '1';
                $_->{edit_cm}   = 1;
            }




в этом же классе у меня есть

           
Код

 unless (
                (
                     (  $c->user_exists()
                    && $_->{id_un} == $c->user->{user}->{id}
                    && $_->{created} > time - MyApp->config->{comment}->{edit_limit}

                            ||                            
                        
                        !$c->user_exists()
                        && $_->{id_un} == 0
                            && $_->{ip} && $c->request->address && $_->{ip} eq $c->request->address 
                    && $_->{created} > time - MyApp->config->{comment}->{edit_limit_guest} )                                                
                    
                    && $loop_data2->{close_co} != 1
                )
                || $c->check_user_roles('moder_co')
              )
            {

                #  print '1';
                $_->{edit_cm}   = 1;
            }


видите что разница только в if unless

как сделать чтобы  один и тот же код не выполнять?



Автор: arto 10.2.2010, 14:43
perldoc -f eval

Автор: gcc 10.2.2010, 15:01
arto, 

спасибо, не знал что именно это там есть, работает

Код

#!/usr/bin/perl
                            
$if = "if";

$t = 1;

$t1 = "{";
$t2 = "}";

sub hh {
$t eq 1;
}

eval " $if ( hh() ) $t1
   print '1sdf';
$t2

";




Код

$ ./perl34.pl
1sdf$ 



...я так понял в mod_perl (catalyst) оно должно быть нормально...




Автор: sir_nuf_nuf 10.2.2010, 16:07
да, должно.

но то что вы хотите сделать - бооольшое зло.  
А) eval "строка" - это все таки медленно
Б) это не безопасно. принципиально. Вам придется очень тщательно следить за тем что может оказаться на месте "if"


У вас же ООП - ну вот и следуйте ему: Создайте класс Condition, отнаследуйте от него IfCondition и вперед!

Код

$cond = "IfCondition"
$conf->check(...)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)