На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Внимательно изучите правила раздела перед созданием темы
0. ПРИЛАГАЙТЕ СВОИ СКРИПТЫ.
1. Прежде чем создать топик, используйте поиск. Возможно это уже обсуждалось.
2. В топике указывайте ОС, режим работы скрипта (CLI|CGI). Очень желателен вывод лог-файлов и того места, куда у вас назначен вывод данных (STDOUT|STDERR)
3. Помните: вы знаете что вы хотите, а форумчане - нет. Поэтому следуйте простому правилу: грамотный развернутый вопрос - грамотный развернутый ответ.
Модераторы: ANDLL
  
    > Метапрограммирование в Perl
         Можно? =) Может кто писал уже?
         Конечно не отказался бы от направления (ссылок, книг и т.п.).
        Perl6? :-)
             IoGA, не знаю )) хотел спросить, возможно ли реализовать? =) хотя и читал, что в перле предкомпиляция производится, но в вики в статьях про метапрограммирование перл указан =)
            Возможно, но, наверное, нужно сначала найти для этого цель.
                 IoGA, цель есть. если возможно реализация, то я в аспирантуру останусь дипломный проект свой развивать до диссера, если нет, то не буду поступать =) Если примет серьезный оборот, то полностью всё опишу здесь.
                Простейший пример, найденный в гугле (ссылки, указанные в комментариях кода очень даже нужно почитать):

                ExpandedWrap disabled
                  #!/usr/bin/env perl6
                   
                  # see:
                  # * http://transfixedbutnotdead.com/2010/01/13/anyone_for_metaprogramming/
                  # * http://transfixedbutnotdead.com/2010/01/14/anyone-for-perl-6-metaprogramming/
                  # * http://fingernailsinoatmeal.com/post/292301859/metaprogramming-ruby-vs-javascript
                   
                  # below runs on Rakudo (31-Oct-2009).
                   
                  use v6;
                   
                  class Ninja {
                      has Str $.name is rw;
                  }
                   
                  my Ninja $drew .= new( name => 'Drew' );
                  my Ninja $adam .= new( name => 'Adam' );
                   
                   
                  ###########################################################
                  # Reopen Ninja class ("is also" does the biz)
                  # and add 'battle_cry' method
                   
                  # augment class Ninja {}
                  class Ninja is also {
                      method battle_cry {
                          say $.name ~ ' says zing!!!';
                      }
                  }
                   
                  $drew.battle_cry; # => Drew says zing!!!
                  $adam.battle_cry; # => Adam says zing!!!
                   
                   
                  ###########################################################
                  # add 'throw_star' method to $drew object by creating
                  # and applying ("does") role to it (Singleton method)
                   
                  role ThrowStar {
                      method throw_star { say "throwing star" }
                  }
                   
                  $drew does ThrowStar;
                  $drew.throw_star; # => throwing a star
                   
                   
                  ###########################################################
                  # call method dynamically
                   
                  $drew.'battle_cry'; # => Drew says zing!!!
                   
                   
                  ###########################################################
                  # add "colour" method closing over $colour_name (ie. closure):
                   
                  my $colour_name = 'black';
                   
                  class Ninja is also {
                      method colour { say "{$.name}'s colour is $colour_name" }
                  }
                   
                  $drew.colour; # => Drew's colour is black
                  $adam.colour; # => Adam's colour is black
                   
                   
                  ###########################################################
                   
                  # "defining a method dynamically on an instance that closes
                  # over local scope and accesses the instance’s state"
                  #
                  # Opps - Class method slipped in while working it out.
                  # $drew.^add_method() does a singleton method.. nice!
                   
                  my $sword_symbol = '********';
                   
                  $drew.^add_method( 'swing', method ( Str $sound_effect ) {
                      say "$.name: $sword_symbol $sound_effect";
                  } );
                   
                  $drew.swing( 'slash!!' );
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0194 ]   [ 14 queries used ]   [ Generated: 14.05.24, 22:19 GMT ]