| Class-MakeMethods documentation | Contained in the Class-MakeMethods distribution. |
Class::MakeMethods::Emulator::mcoder - Emulate the mcoder module
package MyClass;
use Class::MakeMethods::Emulator::mcoder
[qw(get set)] => [qw(color sound height)],
proxy => [qw(runner run walk stop)],
calculated => weight;
sub _calculate_weight { shift->ask_weight }
This module emulates the functionality of the mcoder module, using Class::MakeMethods to generate similar methods.
For example, the following lines are equivalent:
use mcoder 'get' => 'foo'; use mcoder::get 'foo'; use Class::MakeMethods::Template::Hash 'scalar --get' => 'foo';
You may use this module directly, as shown in the SYNOPSIS above,
or you may call use Class::MakeMethods::Emulator::mcoder
'-take_namespace'; to alias the mcoder namespace to this package,
and subsequent calls to the original package will be transparently
handled by this emulator. To remove the emulation aliasing, call
use Class::MakeMethods::Emulator::mcoder '-release_namespace'.
The same mechanism is also available for the "sugar" subclasses.
Caution: This affects all subsequent uses of the mcoder module in your program, including those in other modules, and might cause unexpected effects.
See Class::MakeMethods for general information about this distribution.
See Class::MakeMethods::Emulator for more about this family of subclasses.
See mcoder for documentation of the original module.
| Class-MakeMethods documentation | Contained in the Class-MakeMethods distribution. |
package Class::MakeMethods::Emulator::mcoder; $VERSION = '0.05'; use Class::MakeMethods::Emulator '-isasubclass'; use Class::MakeMethods::Template '-isasubclass'; ######################################################################## sub import { my $class = shift; ( my $target = $class ) =~ s/^Class::MakeMethods::Emulator:://; $class->_handle_namespace( $target, $_[0] ) and shift; $class->make( @_ ) if ( scalar @_ ); } sub new { 'Template::Hash::new --with_values' } sub proxy { 'Template::Universal:forward_methods -target' } sub generic { { '-import' => { 'Template::Hash:scalar' => '*' } } } sub get { { interface => { default => { '*' =>'get' } } } } sub set { { interface => { default => { 'set_*' =>'set' } } } } sub undef { { interface => { default => { 'undef_*' =>'clear' } } } } sub delete { { interface => { default => { 'delete_*'=>'hash_delete' } } } } sub bool_set { { interface => { default => { 'set_*' =>'set_value' } }, '-import' => { 'Template::Hash:boolean' => '*' } } } sub bool_unset { { interface => { default => { 'unset_*' =>'clear' } } } } sub calculated { { interface => { default => { '*' =>'get_init' } }, params => { init_method=>'_calculate_*' } } } ######################################################################## foreach my $type ( qw( new get set proxy calculated ) ) { $INC{"Class/MakeMethods/Emulator/mcoder/$type.pm"} = $INC{"mcoder/$type.pm"} = __FILE__; *{__PACKAGE__ . "::${type}::import"} = sub { (shift) and (__PACKAGE__)->make( $type => [ @_ ] ) }; } ######################################################################## 1; __END__ package Class::MakeMethods::Emulator::mcoder::get; @ISA = 'Class::MakeMethods::Emulator::mcoder'; $INC{"Class/MakeMethods/Emulator/mcoder/get.pm"} = __FILE__; sub import { goto &Class::MakeMethods::Emulator::mcoder::sub_import } package Class::MakeMethods::Emulator::mcoder::set; @ISA = 'Class::MakeMethods::Emulator::mcoder'; $INC{"Class/MakeMethods/Emulator/mcoder/set.pm"} = __FILE__; sub import { goto &Class::MakeMethods::Emulator::mcoder::sub_import } package Class::MakeMethods::Emulator::mcoder::proxy; @ISA = 'Class::MakeMethods::Emulator::mcoder'; $INC{"Class/MakeMethods/Emulator/mcoder/proxy.pm"} = __FILE__; sub import { goto &Class::MakeMethods::Emulator::mcoder::sub_import } 1; __END__