App-revealup
view release on metacpan or search on metacpan
lib/App/revealup/base.pm view on Meta::CPAN
package App::revealup::base;
use strict;
use warnings;
sub import {
my $caller = caller(0);
no strict 'refs';
*{"${caller}::has"} = sub { attr($caller, @_) };
*{"${caller}::new"} = sub {
my ($klass, %opt) = @_;
for my $key (keys %opt) {
attr($caller, $key, $opt{$key}) if $opt{$key};
}
return bless \%opt, $klass;
};
strict->import;
warnings->import;
}
sub attr {
my ( $caller, $k, $v ) = @_;
no strict 'refs';
return if defined *{"${caller}::$k"};
*{"${caller}::$k"} = sub {
my ( $self, $value ) = @_;
if ( !$value ) {
$self->{$k} = $v if !$self->{$k};
return $self->{$k};
}
$self->{$k} = $value if $value;
};
}
1;
( run in 0.670 second using v1.01-cache-2.11-cpan-e93a5daba3e )