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 )