Class-Builtin
view release on metacpan or search on metacpan
lib/Class/Builtin/Array.pm view on Meta::CPAN
sub print {
my $self = shift;
@_ ? CORE::print {$_[0]} @$self : CORE::print @$self;
}
sub say {
my $self = shift;
local $\ = "\n";
local $, = ",";
@_ ? CORE::print {$_[0]} @$self : CORE::print @$self;
}
sub methods {
Class::Builtin::Array->new(
[ sort grep { defined &{$_} } keys %Class::Builtin::Array:: ] );
}
# List::Util related
for my $meth (qw(max maxstr min minstr sum)){
eval qq{
sub Class::Builtin::Array::$meth
{
my \$ret = List::Util::$meth(\@{\$_[0]});
Class::Builtin::Scalar->new(\$ret);
}
};
croak $@ if $@;
}
# They are reinvented. Sigh;
sub first {
my $self = CORE::shift;
my $block = CORE::shift or croak;
for (@$self){
return $_ if $block->($_);
}
return;
}
sub reduce {
my $self = CORE::shift;
my $block = CORE::shift or croak;
my $reduced = $self->[0];
my $pkg = caller;
for ( @$self[ 1 .. $self->length - 1 ] ) {
no strict 'refs';
${ $pkg . '::a' } = $reduced;
${ $pkg . '::b' } = $_;
$reduced = $block->();
}
return Class::Builtin::Scalar->new($reduced);
}
sub shuffle {
__PACKAGE__->new( [ List::Util::shuffle @{ $_[0] } ] );
}
# Scalar::Util related
for my $meth (qw/blessed isweak refaddr reftype weaken/){
eval qq{
sub Class::Builtin::Array::$meth
{
my \$self = CORE::shift;
my \$ret = Scalar::Util::$meth(\$self);
__PACKAGE__->new(\$ret);
}
};
croak $@ if $@;
}
1; # end of Class::Builtin::Array
=head1 NAME
Class::Builtin::Array - Array as an object
=head1 VERSION
$Id: Array.pm,v 0.4 2011/05/21 21:40:54 dankogai Exp dankogai $
=head1 SYNOPSIS
use Class::Builtin::Array; # use Class::Builtin;
my $foo = Class::Builtin::Array->new([0..9]); # OO([0..9]);
print $foo->length; # 10
=head1 EXPORT
None. But see L<Class::Builtin>
=head1 METHODS
This section is under construction. For the time being, try
print Class::Builtin::Array->new([])->methods->join("\n")
=head1 TODO
This section itself is to do :)
=over 2
=item * more methods
=back
=head1 SEE ALSO
L<autobox>, L<overload>, L<perlfunc> L<http://www.ruby-lang.org/>
=head1 AUTHOR
Dan Kogai, C<< <dankogai at dan.co.jp> >>
=head1 ACKNOWLEDGEMENTS
L<autobox>, L<overload>, L<perlfunc>
=head1 COPYRIGHT & LICENSE
( run in 1.799 second using v1.01-cache-2.11-cpan-39bf76dae61 )