LINUX.ORG.RU

Сообщения theri

 

можно ли разработать ОС на perl?

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

часть на Си, другая часть на интерплетаторе, в нем есть байт код и предкомпиляция

тут написано что интерплетатор быстрее работает чем Си, если уметь писать на нем http://www.perlmonks.org/?node_id=579920

http://lurkmore.ru/Perl

theri
()

tie OOP

давайе обсудим сложное ООП в perl

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

кто как использует ООП с «магической функцией» tie?

хочется увидеть на примере!

в книге было написано что это можно использовать, но я реально нигде не видел применение...

вы навренео видели что когда код занимает более 50 000 строк, то он фигово читается....

вот пример, но я не сильно понимаю как это применить, собственно...

какие еще есть примеры, в студию пожалуйста!!!

#Class.pm
package Property;
BEGIN {*UNTIE=*DESTROY}

sub TIESCALAR {
    print "creating layer..\n";
    my$self=\{};
# во имя отца и сына и святого духа, АдминЪ,
# благословляем объект 
    bless $self, $_[0];
    if(defined $_[1]) {
        $self->STORE($_[1]{-default})             if exists $_[1]{-default};
        $$$self{-getter}=$_[1]{-getter}           if exists $_[1]{-getter};
        $$$self{-setter}=$_[1]{-setter}           if exists $_[1]{-setter};
        $$$self{-destroyer}=$_[1]{-destroyer}     if exists $_[1]{-destroyer};
        $$$self{-aftertie}=$_[1]{-aftertie}       if exists $_[1]{-aftertie};
    }
    $$$self{-aftertie}($self, @_) if exists $$$self{-aftertie};
    +$self
}
sub FETCH     {
    if(exists $${$_[0]}{-getter}) {
        +$${$_[0]}{-getter}(@_)
    } else {
        print "getter called..\n";
        +${+shift}
    }
}
sub STORE     {
    if(exists $${$_[0]}{-setter}) {
        +$${$_[0]}{-setter}(@_)
    } else {
        print "setter called..\n";
        +${+$_[0]}=$_[1]
    }
}
sub DESTROY   {
    if(exists $${$_[0]}{-destroyer}) {
        +$${$_[0]}{-destroyer}(@_)
    } else {
        print "destroyer of worlds..\n";
        +shift
    }
}

package Class;

sub new {
    my($class, $self)=(shift, {@_});
    foreach(keys %{$self->{-properties}||={}}) { 
        tie $self->{$_}, Property, $self->{-properties}{$_};
        print $_, "\n";
    }
    delete $self->{-properties};
    +bless $self, $class; 
}

+1
package Child;
use base qw(Class);

sub new {
    +shift->SUPER::new( 
        -properties=>{
            p1=>{
                -default=>1,
                -getter=>'Child::p1_getter' 
            #sub {
                #    print "Your getter\n";
                #    +${+shift}
                #}
            },
            p2=>{
                -default=>3,
                -destroyer=>'Child::p2_destroyer' 
            #sub {
                #   print "Your destroyer\n";
                #}
            }
        }
    );
}
sub p1_getter {
   #...
}
sub p2_destroyer {
   #...
}
sub run {
    print "Running...\n";
    +shift
}

+1
theri
()

RSS подписка на новые темы