NAME

Parse::CPAN::Packages::Fast - parse CPAN's package index

SYNOPSIS

use Parse::CPAN::Packages::Fast;

my $p = Parse::CPAN::Packages::Fast->new;
## or alternatively, if CPAN.pm is not configured:
# my $p = Parse::CPAN::Packages::Fast->new("/path/to/02packages.details.txt.gz");

my $m = $p->package("Kwalify");
# $m is a Parse::CPAN::Packages::Fast::Package object
print $m->package, "\n";   # Kwalify
print $m->version, "\n";   # 1.21

my $d = $m->distribution;
# $d is a Parse::CPAN::Packages::Fast::Distribution object
print $d->dist,    "\n";   # Kwalify
print $d->version, "\n";   # 1.21

DESCRIPTION

This is a largely API compatible rewrite of Parse::CPAN::Packages.

Notable differences are

  • The methods contains and add_package of Parse::CPAN::Packages::Fast::Distribution are not implemented

  • Parse::CPAN::Packages::Fast::Distribution is really a CPAN::DistnameInfo (but this one is compatible with Parse::CPAN::Packages::Distribution>

WHY?

Calling Parse::CPAN::Packages' constructor is quite slow and takes about 10 seconds on my machine. In contrast, the reimplementation just takes a second.

I did some benchmarking of the original module and found no obvious weak point to speed it up. Moose is used here, but does not seem to cause the problem. I suspect that the real problem is just heavy use of method calls.

SEE ALSO

Parse::CPAN::Packages, CPAN::DistnameInfo.