Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Andrew Alakozow                      2:5061/6       27 Oct 2005  12:26:30
 To : Andrey Chernomyrdin
 Subject : Re: Q: Plugins
 -------------------------------------------------------------------------------- 
 
 AC> - --[ main.pl ]-- -
 AC> package main;
 
 Это не нужно, 'main' - пакет по умолчинию.
 
 AC> use strict;
 AC> use Application;
 AC> use Plugin qw(Plugin::MyPlugin1 Plugin::MyPlugin2);
 Я бы вместо Application и Plugin сделал один MyParser (еще лучше, чтобы из 
 названия было понятно, какие данные разбираются) и список "плагинов" вынес в 
 конструктор.
 
 package MyParser;
 
 use strict;
 
 sub new {
   my $class = shift;
 
   my $self  = {};
   bless ($self, $class);
 
   foreach my $plugin (@_) {
     eval {require "$plugin.pm"};
     die "Error loading $plugin: $@" if $@; # или warn
     push @{$self->{plugins}}, $plugin;
   }
 
   return $self;
 }
 
 sub parse {
   my $self = shift;
   my $line = shift;
 
   foreach my $plug (@{$self->{plugins}}){
     $plug->do($line) if $plug->match($line); # do и match можно объединить в 
 один метод
   }
 }
 
 AC> - --[ Plugin::Base.pm ]-- -
 AC> package Plugin::Base;
 AC> use strict;
 
 AC> our     $VERSION        = '1.0';
 
 AC> sub is_plugin { 1 }
 AC> sub name { __PACKAGE__ }
 sub name { ref $_[0]  } # можно наследовать
 
 AC> - --[ Plugin::MyPlugin1 ]-- -
 AC> package Plugin::MyPlugin1;
 
 package PlugBar;
 use strict;
 sub match { $_[1] =~ /bar/ }
 sub do {print "Bar!\n"}
 
 1;
 
 Использовать так:
 
 use MyParser;
 use strict;
 my $parser = MyParser->new(qw(PlugBar PlugFoo));
 
 while (<>){
   $parser->parse($_);
 }
 
 AC> Все в принципе работает, осталось пара _но_ которая раздражает:
 AC> Хотелось-бы что-бы избавится от метода parent внутри plugin-ов,
 AC> как-нибудь это можно сделать ?
 Пользоваться встроенными сресдтвами поддержки ООП.
 
 Андрей.
 --- Microsoft Outlook Express 6.00.2900.2180
  * Origin: Life In The Dark (2:5061/6)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Q: Plugins   Andrew Alakozow   27 Oct 2005 12:26:30 
Архивное /ru.perl/4490380d8f201.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional