|
no warnings; my $M =__PACKAGE__.::;*{ $M .Object::new}= sub { bless { @_ [1.. $#_ ]}, $_ [0]};*{ $M . import }= sub { import warnings;$^H|=1538; my ( $P , %e , %o )= caller .::; shift ; eval "no Mo::$_" ,&{ $M . $_ .::e}( $P ,\ %e ,\ %o ,\ @_ ) for @_ ; return if $e {M}; %e =( extends , sub { eval "no $_[0]()" ;@{ $P .ISA}= $_ [0]}, has , sub { my $n = shift ; my $m = sub { $#_ ? $_ [0]{ $n }= $_ [1]: $_ [0]{ $n }}; $m = $o { $_ }->( $m , $n , @_ ) for sort keys %o ;*{ $P . $n }= $m }, %e ,);*{ $P . $_ }= $e { $_ } for keys %e ;@{ $P .ISA}= $M .Object};*{ $M . 'build::e' }= sub { my ( $P , $e )= @_ ; $e ->{new}= sub { $c = shift ; my $s = bless { @_ }, $c ; my @B ; do { @B =( $c .::BUILD, @B )} while ( $c )=@{ $c .::ISA}; exists &$_ && &$_ ( $s ) for @B ; $s }};*{ $M . 'default::e' }= sub { my ( $P , $e , $o )= @_ ; $o ->{ default }= sub { my ( $m , $n , %a )= @_ ; $a { default }or return $m ; sub { $#_ ? $m ->( @_ ):! exists $_ [0]{ $n }? $_ [0]{ $n }= $a { default }->( @_ ): $m ->( @_ )}}}; my $i =\ &import ;*{ $M . import }= sub {( @_ ==2 and not $_ [1])? pop @_ : @_ ==1? push @_ , grep !/ import /, @f :(); goto &$i }; @f = qw[build default import] ; use strict; use warnings; 1;
|