Almost-minimal filesystem based blog.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

86 lines
1.4 KiB

package MethodSpit;
use strict;
use warnings;
no warnings 'uninitialized';
sub methodspit {
my ($class, @names) = @_;
# These are simple accessors.
foreach my $name (@names) {
makemethod($class, $name);
}
return;
}
# Handy-dandy basic closure:
sub makemethod {
my ($class, $name) = @_;
no strict 'refs';
# Install a generated sub:
*{ "${class}::${name}" } =
sub {
my ($self, $param) = @_;
$self->{$name} = $param if defined $param;
return $self->{$name};
}
}
sub methodspit_depend {
my ($class, $dependency, $names) = @_;
my %names = %{ $names };
foreach my $name (keys %names) {
my $default = $names{$name};
makemethod_depend($class, $dependency, $name, $default);
}
}
# A more complicated closure. Makes a return value dependent on another
# method, if not already explicitly defined.
sub makemethod_depend {
my ($class, $dependency, $name, $default) = @_;
no strict 'refs';
*{ "${class}::${name}" } =
sub {
my ($self, $param) = @_;
if (defined $param) {
$self->{$name} = $param;
}
if (defined $self->{$name}) {
return $self->{$name};
} else {
return $self->$dependency . $default;
}
}
# return;
}
1;
=pod
=head1 NAME
MethodSpit - quickie method generation
=head1 SYNOPSIS
=head1 DESCRIPTION
The following bits are cheap method generation, in place of using
Class::Accessor or Object::Tiny.
=cut