Alt-IO-All-new
view release on metacpan or search on metacpan
lib/IO/All/Base.pm view on Meta::CPAN
package IO::All::Base;
# use Mo qw'default build import exporter xxx';
# The following line of code was produced from the previous line by
# Mo::Inline version 0.38
no warnings;my$M=__PACKAGE__.'::';*{$M.Object::new}=sub{my$c=shift;my$s=bless{@_},$c;my%n=%{$c.::.':E'};map{$s->{$_}=$n{$_}->()if!exists$s->{$_}}keys%n;$s};*{$M.import}=sub{import warnings;$^H|=1538;my($P,%e,%o)=caller.'::';shift;eval"no Mo::$_",&{$M...
our @EXPORT = qw(chain option);
sub option {
my $package = caller;
my ($field, $default) = @_;
$default ||= 0;
field("_$field", $default);
no strict 'refs';
*{"${package}::$field"} =
sub {
my $self = shift;
$self->{"_$field"} = @_ ? shift(@_) : 1;
return $self;
};
}
sub chain {
my $package = caller;
my ($field, $default) = @_;
no strict 'refs';
*{"${package}::$field"} =
sub {
my $self = shift;
if (@_) {
$self->{$field} = shift;
return $self;
}
return $default unless exists $self->{$field};
return $self->{$field};
};
}
sub field {
my $package = caller;
my ($field, $default) = @_;
no strict 'refs';
return if defined &{"${package}::$field"};
*{"${package}::$field"} =
sub {
my $self = shift;
unless (exists $self->{$field}) {
$self->{$field} =
ref($default) eq 'ARRAY' ? [] :
ref($default) eq 'HASH' ? {} :
$default;
}
return $self->{$field} unless @_;
$self->{$field} = shift;
};
}
package IO::All::OO::Object;
sub throw {
my $self = shift;
require Carp;
Carp::croak(@_);
}
( run in 1.985 second using v1.01-cache-2.11-cpan-39bf76dae61 )