Acme-CPANAuthors
view release on metacpan or search on metacpan
lib/Acme/CPANAuthors/Utils/CPANIndex.pm view on Meta::CPAN
package Acme::CPANAuthors::Utils::CPANIndex;
use strict;
use warnings;
use Carp;
sub new {
my $class = shift;
my $self = bless { preambles => {} }, $class;
$self->_install_methods;
$self->{$_} = {} for keys %{ $self->_mappings };
$self->_parse(@_) if @_;
$self;
}
sub _mappings {+{}}
sub _preambles {}
sub _install_methods {
my $self = shift;
my $class = ref $self;
no strict 'refs';
no warnings 'redefine';
for my $method ($self->_preambles) {
*{"$class\::$method"} = sub {
my $self = shift;
$self->{preambles}{$method};
}
}
for my $method (keys %{ $self->_mappings }) {
my $key = $self->_mappings->{$method};
*{"$class\::$method"} = sub {
my ($self, $name) = @_;
$self->{$key}{$name};
};
*{"$class\::${method}s"} = sub {
my $self = shift;
values %{ $self->{$key} };
};
*{"$class\::${method}_count"} = sub {
my $self = shift;
scalar values %{ $self->{$key} };
};
}
}
sub _handle {
my ($self, $file) = @_;
my $handle;
if ($file =~ /\.gz$/) {
require IO::Uncompress::Gunzip;
$handle = IO::Uncompress::Gunzip->new($file) or croak "Failed to read $file";
}
else {
require IO::File;
$handle = IO::File->new($file, 'r') or croak "Failed to read $file";
binmode $handle;
}
$handle;
}
1;
__END__
=head1 NAME
Acme::CPANAuthors::Utils::CPANIndex
=head1 SYNOPSIS
=head1 DESCRIPTION
=head1 METHODS
=head2 new
=head1 AUTHOR
Kenichi Ishigaki, E<lt>ishigaki@cpan.orgE<gt>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2010 by Kenichi Ishigaki.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=cut
( run in 0.471 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )