diff options
34 files changed, 37496 insertions, 233 deletions
diff --git a/.gitignore b/.gitignore index c13c2f07c..85b7ca758 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ /private_locale ._* .DS_Store +.carton local-lib5 META.yml Makefile @@ -18,5 +19,9 @@ tags /web/css/core.css /web/css/main.css /web/cobrands/fixmystreet/*.css +/local -/web/cobrands/fixmystreet/compass_app_log.txt
\ No newline at end of file +/web/cobrands/fixmystreet/compass_app_log.txt +blog/web/wp +blog/conf/general +blog/conf/general.deployed diff --git a/README.pod b/README.pod index f6041e286..6b4494f38 100644 --- a/README.pod +++ b/README.pod @@ -1,19 +1,76 @@ +=head1 Welcome to FixMyStreet -=head1 NAME +FixMyStreet is an open source project to develop a website for reporting +problems such as potholes and broken street lights to the appropriate authority. -FixMyStreet +Users locate problems using a combination of address and sticking a pin +in a map without worrying about the correct authority to report it to. +FixMyStreet then works out the correct authority to report it to using +the problem location and type and sends a report. -=head1 DESCRIPTION +It was created in 2007 by L<mySociety|http://www.mysociety.org> for reporting problems to UK councils and +has been copied around the world. -FixMyStreet is a project that allows anyone to report an issue such as potholes, -broken street lights, severe littering, water leaks. These issues are then -routed to the correct body who can arrange to have them fixed. +We're working hard to make it easy to install and re-use in other +countries and welcome questions about how it works on our mailing list: +L<https://secure.mysociety.org/admin/lists/mailman/listinfo/fixmystreet>. -=head1 INSTALLING +We've also got a new site and blog which over time will become a useful +resource for people interested in installing or developing FixMyStreet +at L<http://code.fixmystreet.com/>. -Installing from scratch can be a bit daunting but is fully documented in the -notes/INSTALL file. +FixMyStreet is written in Perl and uses the Catalyst web framework. -We are hoping to make it much easier for you to try the code by letting you -start a fully installed system with test data pre-loaded on Amazon's servers. -More details will follow soon. +=head1 EXAMPLES + +L<http://www.fixmystreet.com> + +L<http://www.fiksgatami.no/> + +=head1 QUICKSTART + +If you're reasonably sure what you are doing then you can follow the +quickstart instructions. Otherwise there are more detailed instructions +in C<notes/INSTALL.pod> + +=over + +=item * + +Fetch the latest version from L<Github|https://github.com/mysociety/fixmystreet/> + +=item * + +Create a new PostGIS enabled database + +=item * + +Create the database using C<db/schema.sql> and the C<db/alert_types.sql> + +=item * + +Run C<./bin/install_perl_modules> to install the required Perl modules. + +=item * + +Create a new Apache vhost based on C<conf/httpd-conf.example> + +=item * + +Copy C<conf/general.yml-example> to C<conf/general.yml> and update +the defaults accordingly. + +=item * + +Generate the CSS by running C<bin/make_css> + +=item * + +Restart the webserver + +=item * + +Edit the crontab from C<conf/crontab> to replace the placeholders and +install it. See C<notes/INSTALL.pod> for more details on the placeholders. + +=back diff --git a/bin/cpanm b/bin/cpanm new file mode 100755 index 000000000..14a9a3cb4 --- /dev/null +++ b/bin/cpanm @@ -0,0 +1,11316 @@ +#!/usr/bin/env perl +# +# You want to install cpanminus? Run the following command and it will +# install itself for you. You might want to run it as a root with sudo +# if you want to install to places like /usr/local/bin. +# +# % curl -L http://cpanmin.us | perl - --self-upgrade +# +# If you don't have curl but wget, replace `curl -L` with `wget -O -`. +# +# For more details about this program, visit http://search.cpan.org/dist/App-cpanminus +# +# DO NOT EDIT -- this is an auto generated file +# This chunk of stuff was generated by App::FatPacker. To find the original +# file's code, look for the end of this BEGIN block or the string 'FATPACK' +BEGIN { +my %fatpacked; + +$fatpacked{"App/cpanminus.pm"} = <<'APP_CPANMINUS'; + package App::cpanminus; + our $VERSION = "1.5007"; + + =head1 NAME + + App::cpanminus - get, unpack, build and install modules from CPAN + + =head1 SYNOPSIS + + cpanm Module + + Run C<cpanm -h> for more options. + + =head1 DESCRIPTION + + cpanminus is a script to get, unpack, build and install modules from + CPAN and does nothing else. + + It's dependency free (can bootstrap itself), requires zero + configuration, and stands alone. When running, it requires only 10MB + of RAM. + + =head1 INSTALLATION + + There are several ways to install cpanminus to your system. + + =head2 Package management system + + There are Debian packages, RPMs, FreeBSD ports, and packages for other + operation systems available. If you want to use the package management system, + search for cpanminus and use the appropriate command to install. This makes it + easy to install C<cpanm> to your system without thinking about where to + install, and later upgrade. + + =head2 Installing to system perl + + You can also use the latest cpanminus to install cpanminus itself: + + curl -L http://cpanmin.us | perl - --sudo App::cpanminus + + This will install C<cpanm> to your bin directory like + C</usr/local/bin> (unless you configured C<INSTALL_BASE> with + L<local::lib>), so you probably need the C<--sudo> option. + + =head2 Installing to local perl (perlbrew) + + If you have perl in your home directory, which is the case if you use + tools like L<perlbrew>, you don't need the C<--sudo> option, since + you're most likely to have a write permission to the perl's library + path. You can just do: + + curl -L http://cpanmin.us | perl - App::cpanminus + + to install the C<cpanm> executable to the perl's bin path, like + C<~/perl5/perlbrew/bin/cpanm>. + + =head2 Downloading the standalone executable + + You can also copy the standalone executable to whatever location you'd like. + + cd ~/bin + curl -LO http://xrl.us/cpanm + chmod +x cpanm + # edit shebang if you don't have /usr/bin/env + + This just works, but be sure to grab the new version manually when you + upgrade because C<--self-upgrade> might not work for this. + + =head1 DEPENDENCIES + + perl 5.8 or later. + + =over 4 + + =item * + + 'tar' executable (bsdtar or GNU tar version 1.22 are rcommended) or Archive::Tar to unpack files. + + =item * + + C compiler, if you want to build XS modules. + + =item * + + make + + =item * + + Module::Build (core in 5.10) + + =back + + =head1 QUESTIONS + + =head2 Another CPAN installer? + + OK, the first motivation was this: the CPAN shell runs out of memory (or swaps + heavily and gets really slow) on Slicehost/linode's most affordable plan with + only 256MB RAM. Should I pay more to install perl modules from CPAN? I don't + think so. + + =head2 But why a new client? + + First of all, let me be clear that CPAN and CPANPLUS are great tools + I've used for I<literally> years (you know how many modules I have on + CPAN, right?). I really respect their efforts of maintaining the most + important tools in the CPAN toolchain ecosystem. + + However, for less experienced users (mostly from outside the Perl community), + or even really experienced Perl developers who know how to shoot themselves in + their feet, setting up the CPAN toolchain often feels like yak shaving, + especially when all they want to do is just install some modules and start + writing code. + + =head2 Zero-conf? How does this module get/parse/update the CPAN index? + + It queries the CPAN Meta DB site running on Google AppEngine at + L<http://cpanmetadb.plackperl.org/>. The site is updated every hour to reflect + the latest changes from fast syncing mirrors. The script then also falls back + to scrape the site L<http://search.cpan.org/>. + + Fetched files are unpacked in C<~/.cpanm> and automatically cleaned up + periodically. You can configure the location of this with the + C<PERL_CPANM_HOME> environment variable. + + =head2 Where does this install modules to? Do I need root access? + + It installs to wherever ExtUtils::MakeMaker and Module::Build are + configured to (via C<PERL_MM_OPT> and C<PERL_MB_OPT>). So if you're + using local::lib, then it installs to your local perl5 + directory. Otherwise it installs to the site_perl directory that + belongs to your perl. + + cpanminus at a boot time checks whether you have configured + local::lib, or have the permission to install modules to the site_perl + directory. If neither, it automatically sets up local::lib compatible + installation path in a C<perl5> directory under your home + directory. To avoid this, run the script as the root user, with + C<--sudo> option or with C<--local-lib> option. + + =head2 cpanminus can't install the module XYZ. Is it a bug? + + It is more likely a problem with the distribution itself. cpanminus + doesn't support or is known to have issues with distributions like as + follows: + + =over 4 + + =item * + + Tests that require input from STDIN. + + =item * + + Tests that might fail when C<AUTOMATED_TESTING> is enabled. + + =item * + + Modules that have invalid numeric values as VERSION (such as C<1.1a>) + + =back + + These failures can be reported back to the author of the module so + that they can fix it accordingly, rather than me. + + =head2 Does cpanm support the feature XYZ of L<CPAN> and L<CPANPLUS>? + + Most likely not. Here are the things that cpanm doesn't do by + itself. And it's a feature - you got that from the name I<minus>, + right? + + If you need these features, use L<CPAN>, L<CPANPLUS> or the standalone + tools that are mentioned. + + =over 4 + + =item * + + Bundle:: module dependencies + + =item * + + CPAN testers reporting + + =item * + + Building RPM packages from CPAN modules + + =item * + + Listing the outdated modules that needs upgrading. See L<App::cpanoutdated> + + =item * + + Uninstalling modules. See L<pm-uninstall>. + + =item * + + Showing the changes of the modules you're about to upgrade. See L<cpan-listchanges> + + =item * + + Patching CPAN modules with distroprefs. + + =back + + See L<cpanm> or C<cpanm -h> to see what cpanminus I<can> do :) + + =head1 COPYRIGHT + + Copyright 2010- Tatsuhiko Miyagawa + + The standalone executable contains the following modules embedded. + + =over 4 + + =item L<CPAN::DistnameInfo> Copyright 2003 Graham Barr + + =item L<Parse::CPAN::Meta> Copyright 2006-2009 Adam Kennedy + + =item L<local::lib> Copyright 2007-2009 Matt S Trout + + =item L<HTTP::Tiny> Copyright 2011 Christian Hansen + + =item L<Module::Metadata> Copyright 2001-2006 Ken Williams. 2010 Matt S Trout + + =item L<version> Copyright 2004-2010 John Peacock + + =item L<JSON::PP> Copyright 2007−2011 by Makamaka Hannyaharamitu + + =item L<CPAN::Meta> Copyright (c) 2010 by David Golden and Ricardo Signes + + =item L<Try::Tiny> Copyright (c) 2009 Yuval Kogman + + =item L<parent> Copyright (c) 2007-10 Max Maischein + + =item L<Version::Requirements> copyright (c) 2010 by Ricardo Signes + + =item L<CPAN::Meta::YAML> copyright (c) 2010 by Adam Kennedy + + =back + + =head1 LICENSE + + Same as Perl. + + =head1 CREDITS + + =head2 CONTRIBUTORS + + Patches and code improvements were contributed by: + + Goro Fuji, Kazuhiro Osawa, Tokuhiro Matsuno, Kenichi Ishigaki, Ian + Wells, Pedro Melo, Masayoshi Sekimura, Matt S Trout (mst), squeeky, + horus and Ingy dot Net. + + =head2 ACKNOWLEDGEMENTS + + Bug reports, suggestions and feedbacks were sent by, or general + acknowledgement goes to: + + Jesse Vincent, David Golden, Andreas Koenig, Jos Boumans, Chris + Williams, Adam Kennedy, Audrey Tang, J. Shirley, Chris Prather, Jesse + Luehrs, Marcus Ramberg, Shawn M Moore, chocolateboy, Chirs Nehren, + Jonathan Rockway, Leon Brocard, Simon Elliott, Ricardo Signes, AEvar + Arnfjord Bjarmason, Eric Wilhelm, Florian Ragwitz and xaicron. + + =head1 COMMUNITY + + =over 4 + + =item L<http://github.com/miyagawa/cpanminus> - source code repository, issue tracker + + =item L<irc://irc.perl.org/#toolchain> - discussions about Perl toolchain. I'm there. + + =back + + =head1 NO WARRANTY + + This software is provided "as-is," without any express or implied + warranty. In no event shall the author be held liable for any damages + arising from the use of the software. + + =head1 SEE ALSO + + L<CPAN> L<CPANPLUS> L<pip> + + =cut + + 1; +APP_CPANMINUS + +$fatpacked{"App/cpanminus/script.pm"} = <<'APP_CPANMINUS_SCRIPT'; + package App::cpanminus::script; + use strict; + use Config; + use Cwd (); + use File::Basename (); + use File::Find (); + use File::Path (); + use File::Spec (); + use File::Copy (); + use Getopt::Long (); + use Parse::CPAN::Meta; + use Symbol (); + + use constant WIN32 => $^O eq 'MSWin32'; + use constant SUNOS => $^O eq 'solaris'; + + our $VERSION = "1.5007"; + + my $quote = WIN32 ? q/"/ : q/'/; + + sub new { + my $class = shift; + + bless { + home => "$ENV{HOME}/.cpanm", + cmd => 'install', + seen => {}, + notest => undef, + installdeps => undef, + force => undef, + sudo => undef, + make => undef, + verbose => undef, + quiet => undef, + interactive => undef, + log => undef, + mirrors => [], + mirror_only => undef, + mirror_index => undef, + perl => $^X, + argv => [], + local_lib => undef, + self_contained => undef, + prompt_timeout => 0, + prompt => undef, + configure_timeout => 60, + try_lwp => 1, + try_wget => 1, + try_curl => 1, + uninstall_shadows => ($] < 5.012), + skip_installed => 1, + skip_satisfied => 0, + auto_cleanup => 7, # days + pod2man => 1, + installed_dists => 0, + showdeps => 0, + scandeps => 0, + scandeps_tree => [], + format => 'tree', + save_dists => undef, + skip_configure => 0, + @_, + }, $class; + } + + sub env { + my($self, $key) = @_; + $ENV{"PERL_CPANM_" . $key}; + } + + sub parse_options { + my $self = shift; + + local @ARGV = @{$self->{argv}}; + push @ARGV, split /\s+/, $self->env('OPT'); + push @ARGV, @_; + + Getopt::Long::Configure("bundling"); + Getopt::Long::GetOptions( + 'f|force' => sub { $self->{skip_installed} = 0; $self->{force} = 1 }, + 'n|notest!' => \$self->{notest}, + 'S|sudo!' => \$self->{sudo}, + 'v|verbose' => sub { $self->{verbose} = $self->{interactive} = 1 }, + 'q|quiet!' => \$self->{quiet}, + 'h|help' => sub { $self->{action} = 'show_help' }, + 'V|version' => sub { $self->{action} = 'show_version' }, + 'perl=s' => \$self->{perl}, + 'l|local-lib=s' => sub { $self->{local_lib} = $self->maybe_abs($_[1]) }, + 'L|local-lib-contained=s' => sub { + $self->{local_lib} = $self->maybe_abs($_[1]); + $self->{self_contained} = 1; + $self->{pod2man} = undef; + }, + 'mirror=s@' => $self->{mirrors}, + 'mirror-only!' => \$self->{mirror_only}, + 'mirror-index=s' => sub { $self->{mirror_index} = $_[1]; $self->{mirror_only} = 1 }, + 'cascade-search!' => \$self->{cascade_search}, + 'prompt!' => \$self->{prompt}, + 'installdeps' => \$self->{installdeps}, + 'skip-installed!' => \$self->{skip_installed}, + 'skip-satisfied!' => \$self->{skip_satisfied}, + 'reinstall' => sub { $self->{skip_installed} = 0 }, + 'interactive!' => \$self->{interactive}, + 'i|install' => sub { $self->{cmd} = 'install' }, + 'info' => sub { $self->{cmd} = 'info' }, + 'look' => sub { $self->{cmd} = 'look'; $self->{skip_installed} = 0 }, + 'self-upgrade' => sub { $self->{cmd} = 'install'; $self->{skip_installed} = 1; push @ARGV, 'App::cpanminus' }, + 'uninst-shadows!' => \$self->{uninstall_shadows}, + 'lwp!' => \$self->{try_lwp}, + 'wget!' => \$self->{try_wget}, + 'curl!' => \$self->{try_curl}, + 'auto-cleanup=s' => \$self->{auto_cleanup}, + 'man-pages!' => \$self->{pod2man}, + 'scandeps' => \$self->{scandeps}, + 'showdeps' => sub { $self->{showdeps} = 1; $self->{skip_installed} = 0 }, + 'format=s' => \$self->{format}, + 'save-dists=s' => sub { + $self->{save_dists} = $self->maybe_abs($_[1]); + }, + 'skip-configure!' => \$self->{skip_configure}, + 'metacpan' => \$self->{metacpan}, + ); + + if (!@ARGV && $0 ne '-' && !-t STDIN){ # e.g. # cpanm < author/requires.cpanm + push @ARGV, $self->load_argv_from_fh(\*STDIN); + $self->{load_from_stdin} = 1; + } + + $self->{argv} = \@ARGV; + } + + sub check_libs { + my $self = shift; + return if $self->{_checked}++; + + $self->bootstrap_local_lib; + if (@{$self->{bootstrap_deps} || []}) { + local $self->{notest} = 1; # test failure in bootstrap should be tolerated + local $self->{scandeps} = 0; + $self->install_deps(Cwd::cwd, 0, @{$self->{bootstrap_deps}}); + } + } + + sub doit { + my $self = shift; + + $self->setup_home; + $self->init_tools; + + if (my $action = $self->{action}) { + $self->$action() and return 1; + } + + $self->show_help(1) + unless @{$self->{argv}} or $self->{load_from_stdin}; + + $self->configure_mirrors; + + my $cwd = Cwd::cwd; + + my @fail; + for my $module (@{$self->{argv}}) { + if ($module =~ s/\.pm$//i) { + my ($volume, $dirs, $file) = File::Spec->splitpath($module); + $module = join '::', grep { $_ } File::Spec->splitdir($dirs), $file; + } + + ($module, my $version) = split /\~/, $module, 2; + if ($self->{skip_satisfied} or defined $version) { + $self->check_libs; + my($ok, $local) = $self->check_module($module, $version || 0); + if ($ok) { + $self->diag("You have $module (" . ($local || 'undef') . ")\n", 1); + next; + } + } + + $self->chdir($cwd); + $self->install_module($module, 0, $version) + or push @fail, $module; + } + + if ($self->{base} && $self->{auto_cleanup}) { + $self->cleanup_workdirs; + } + + if ($self->{installed_dists}) { + my $dists = $self->{installed_dists} > 1 ? "distributions" : "distribution"; + $self->diag("$self->{installed_dists} $dists installed\n", 1); + } + + if ($self->{scandeps}) { + $self->dump_scandeps(); + } + + return !@fail; + } + + sub setup_home { + my $self = shift; + + $self->{home} = $self->env('HOME') if $self->env('HOME'); + + unless (_writable($self->{home})) { + die "Can't write to cpanm home '$self->{home}': You should fix it with chown/chmod first.\n"; + } + + $self->{base} = "$self->{home}/work/" . time . ".$$"; + File::Path::mkpath([ $self->{base} ], 0, 0777); + + my $link = "$self->{home}/latest-build"; + eval { unlink $link; symlink $self->{base}, $link }; + + $self->{log} = File::Spec->catfile($self->{home}, "build.log"); # because we use shell redirect + + { + my $log = $self->{log}; my $base = $self->{base}; + $self->{at_exit} = sub { + my $self = shift; + File::Copy::copy($self->{log}, "$self->{base}/build.log"); + }; + } + + { open my $out, ">$self->{log}" or die "$self->{log}: $!" } + + $self->chat("cpanm (App::cpanminus) $VERSION on perl $] built for $Config{archname}\n" . + "Work directory is $self->{base}\n"); + } + + sub fetch_meta_sco { + my($self, $dist) = @_; + return if $self->{mirror_only}; + + my $meta_yml = $self->get("http://search.cpan.org/meta/$dist->{distvname}/META.yml"); + return $self->parse_meta_string($meta_yml); + } + + sub package_index_for { + my ($self, $mirror) = @_; + return $self->source_for($mirror) . "/02packages.details.txt"; + } + + sub generate_mirror_index { + my ($self, $mirror) = @_; + my $file = $self->package_index_for($mirror); + my $gz_file = $file . '.gz'; + my $index_mtime = (stat $gz_file)[9]; + + unless (-e $file && (stat $file)[9] >= $index_mtime) { + $self->chat("Uncompressing index file...\n"); + if (eval {require Compress::Zlib}) { + my $gz = Compress::Zlib::gzopen($gz_file, "rb") + or do { $self->diag_fail("$Compress::Zlib::gzerrno opening compressed index"); return}; + open my $fh, '>', $file + or do { $self->diag_fail("$! opening uncompressed index for write"); return }; + my $buffer; + while (my $status = $gz->gzread($buffer)) { + if ($status < 0) { + $self->diag_fail($gz->gzerror . " reading compressed index"); + return; + } + print $fh $buffer; + } + } else { + if (system("gunzip -c $gz_file > $file")) { + $self->diag_fail("Cannot uncompress -- please install gunzip or Compress::Zlib"); + return; + } + } + utime $index_mtime, $index_mtime, $file; + } + return 1; + } + + sub search_mirror_index { + my ($self, $mirror, $module, $version) = @_; + $self->search_mirror_index_file($self->package_index_for($mirror), $module, $version); + } + + sub search_mirror_index_file { + my($self, $file, $module, $version) = @_; + + open my $fh, '<', $file or return; + my $found; + while (<$fh>) { + if (m!^\Q$module\E\s+([\w\.]+)\s+(.*)!m) { + $found = $self->cpan_module($module, $2, $1); + last; + } + } + + return $found unless $self->{cascade_search}; + + if ($found) { + if (!$version or + version->new($found->{version} || 0) >= version->new($version)) { + return $found; + } else { + $self->chat("Found $module version $found->{version} < $version.\n"); + } + } + + return; + } + + sub search_module { + my($self, $module, $version) = @_; + + unless ($self->{mirror_only}) { + if ($self->{metacpan}) { + require JSON::PP; + $self->chat("Searching $module on metacpan ...\n"); + my $module_uri = "http://api.metacpan.org/module/$module"; + my $module_json = $self->get($module_uri); + my $module_meta = eval { JSON::PP::decode_json($module_json) }; + if ($module_meta && $module_meta->{distribution}) { + my $dist_uri = "http://api.metacpan.org/release/$module_meta->{distribution}"; + my $dist_json = $self->get($dist_uri); + my $dist_meta = eval { JSON::PP::decode_json($dist_json) }; + if ($dist_meta && $dist_meta->{download_url}) { + (my $distfile = $dist_meta->{download_url}) =~ s!.+/authors/id/!!; + local $self->{mirrors} = $self->{mirrors}; + if ($dist_meta->{stat}->{mtime} > time()-24*60*60) { + $self->{mirrors} = ['http://cpan.metacpan.org']; + } + return $self->cpan_module($module, $distfile, $dist_meta->{version}); + } + } + $self->diag_fail("Finding $module on metacpan failed."); + } + + $self->chat("Searching $module on cpanmetadb ...\n"); + my $uri = "http://cpanmetadb.plackperl.org/v1.0/package/$module"; + my $yaml = $self->get($uri); + my $meta = $self->parse_meta_string($yaml); + if ($meta && $meta->{distfile}) { + return $self->cpan_module($module, $meta->{distfile}, $meta->{version}); + } + + $self->diag_fail("Finding $module on cpanmetadb failed."); + + $self->chat("Searching $module on search.cpan.org ...\n"); + my $uri = "http://search.cpan.org/perldoc?$module"; + my $html = $self->get($uri); + $html =~ m!<a href="/CPAN/authors/id/(.*?\.(?:tar\.gz|tgz|tar\.bz2|zip))">! + and return $self->cpan_module($module, $1); + + $self->diag_fail("Finding $module on search.cpan.org failed."); + } + + if ($self->{mirror_index}) { + $self->chat("Searching $module on mirror index $self->{mirror_index} ...\n"); + my $pkg = $self->search_mirror_index_file($self->{mirror_index}, $module, $version); + return $pkg if $pkg; + } + + MIRROR: for my $mirror (@{ $self->{mirrors} }) { + $self->chat("Searching $module on mirror $mirror ...\n"); + my $name = '02packages.details.txt.gz'; + my $uri = "$mirror/modules/$name"; + my $gz_file = $self->package_index_for($mirror) . '.gz'; + + unless ($self->{pkgs}{$uri}) { + $self->chat("Downloading index file $uri ...\n"); + $self->mirror($uri, $gz_file); + $self->generate_mirror_index($mirror) or next MIRROR; + $self->{pkgs}{$uri} = "!!retrieved!!"; + } + + my $pkg = $self->search_mirror_index($mirror, $module, $version); + return $pkg if $pkg; + + $self->diag_fail("Finding $module ($version) on mirror $mirror failed."); + } + + return; + } + + sub source_for { + my($self, $mirror) = @_; + $mirror =~ s/[^\w\.\-]+/%/g; + + my $dir = "$self->{home}/sources/$mirror"; + File::Path::mkpath([ $dir ], 0, 0777); + + return $dir; + } + + sub load_argv_from_fh { + my($self, $fh) = @_; + + my @argv; + while(defined(my $line = <$fh>)){ + chomp $line; + $line =~ s/#.+$//; # comment + $line =~ s/^\s+//; # trim spaces + $line =~ s/\s+$//; # trim spaces + + push @argv, split ' ', $line if $line; + } + return @argv; + } + + sub show_version { + print "cpanm (App::cpanminus) version $VERSION\n"; + return 1; + } + + sub show_help { + my $self = shift; + + if ($_[0]) { + die <<USAGE; + Usage: cpanm [options] Module [...] + + Try `cpanm --help` or `man cpanm` for more options. + USAGE + } + + print <<HELP; + Usage: cpanm [options] Module [...] + + Options: + -v,--verbose Turns on chatty output + -q,--quiet Turns off the most output + --interactive Turns on interactive configure (required for Task:: modules) + -f,--force force install + -n,--notest Do not run unit tests + -S,--sudo sudo to run install commands + --installdeps Only install dependencies + --showdeps Only display direct dependencies + --reinstall Reinstall the distribution even if you already have the latest version installed + --mirror Specify the base URL for the mirror (e.g. http://cpan.cpantesters.org/) + --mirror-only Use the mirror's index file instead of the CPAN Meta DB + --prompt Prompt when configure/build/test fails + -l,--local-lib Specify the install base to install modules + -L,--local-lib-contained Specify the install base to install all non-core modules + --auto-cleanup Number of days that cpanm's work directories expire in. Defaults to 7 + + Commands: + --self-upgrade upgrades itself + --info Displays distribution info on CPAN + --look Opens the distribution with your SHELL + -V,--version Displays software version + + Examples: + + cpanm Test::More # install Test::More + cpanm MIYAGAWA/Plack-0.99_05.tar.gz # full distribution path + cpanm http://example.org/LDS/CGI.pm-3.20.tar.gz # install from URL + cpanm ~/dists/MyCompany-Enterprise-1.00.tar.gz # install from a local file + cpanm --interactive Task::Kensho # Configure interactively + cpanm . # install from local directory + cpanm --installdeps . # install all the deps for the current directory + cpanm -L extlib Plack # install Plack and all non-core deps into extlib + cpanm --mirror http://cpan.cpantesters.org/ DBI # use the fast-syncing mirror + + You can also specify the default options in PERL_CPANM_OPT environment variable in the shell rc: + + export PERL_CPANM_OPT="--prompt --reinstall -l ~/perl --mirror http://cpan.cpantesters.org" + + Type `man cpanm` or `perldoc cpanm` for the more detailed explanation of the options. + + HELP + + return 1; + } + + sub _writable { + my $dir = shift; + my @dir = File::Spec->splitdir($dir); + while (@dir) { + $dir = File::Spec->catdir(@dir); + if (-e $dir) { + return -w _; + } + pop @dir; + } + + return; + } + + sub maybe_abs { + my($self, $lib) = @_; + return $lib if $lib eq '_'; # special case: gh-113 + $lib =~ /^[~\/]/ ? $lib : File::Spec->canonpath(Cwd::cwd . "/$lib"); + } + + sub bootstrap_local_lib { + my $self = shift; + + # If -l is specified, use that. + if ($self->{local_lib}) { + return $self->setup_local_lib($self->{local_lib}); + } + + # root, locally-installed perl or --sudo: don't care about install_base + return if $self->{sudo} or (_writable($Config{installsitelib}) and _writable($Config{installsitebin})); + + # local::lib is configured in the shell -- yay + if ($ENV{PERL_MM_OPT} and ($ENV{MODULEBUILDRC} or $ENV{PERL_MB_OPT})) { + $self->bootstrap_local_lib_deps; + return; + } + + $self->setup_local_lib; + + $self->diag(<<DIAG); + ! + ! Can't write to $Config{installsitelib} and $Config{installsitebin}: Installing modules to $ENV{HOME}/perl5 + ! To turn off this warning, you have to do one of the following: + ! - run me as a root or with --sudo option (to install to $Config{installsitelib} and $Config{installsitebin}) + | - run me with --local-lib option e.g. cpanm --local-lib=~/perl5 + ! - Set PERL_CPANM_OPT="--local-lib=~/perl5" environment variable (in your shell rc file) + ! - Configure local::lib in your shell to set PERL_MM_OPT etc. + ! + DIAG + sleep 2; + } + + sub _core_only_inc { + my($self, $base) = @_; + require local::lib; + ( + local::lib->install_base_perl_path($base), + local::lib->install_base_arch_path($base), + @Config{qw(privlibexp archlibexp)}, + ); + } + + sub _diff { + my($self, $old, $new) = @_; + + my @diff; + my %old = map { $_ => 1 } @$old; + for my $n (@$new) { + push @diff, $n unless exists $old{$n}; + } + + @diff; + } + + sub _setup_local_lib_env { + my($self, $base) = @_; + local $SIG{__WARN__} = sub { }; # catch 'Attempting to write ...' + local::lib->setup_env_hash_for($base); + } + + sub setup_local_lib { + my($self, $base) = @_; + $base = undef if $base eq '_'; + + require local::lib; + { + local $0 = 'cpanm'; # so curl/wget | perl works + $base ||= "~/perl5"; + if ($self->{self_contained}) { + my @inc = $self->_core_only_inc($base); + $self->{search_inc} = [ @inc ]; + } else { + $self->{search_inc} = [ + local::lib->install_base_arch_path($base), + local::lib->install_base_perl_path($base), + @INC, + ]; + } + $self->_setup_local_lib_env($base); + } + + $self->bootstrap_local_lib_deps; + } + + sub bootstrap_local_lib_deps { + my $self = shift; + push @{$self->{bootstrap_deps}}, + 'ExtUtils::MakeMaker' => 6.31, + 'ExtUtils::Install' => 1.46; + } + + sub prompt_bool { + my($self, $mess, $def) = @_; + + my $val = $self->prompt($mess, $def); + return lc $val eq 'y'; + } + + sub prompt { + my($self, $mess, $def) = @_; + + my $isa_tty = -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT)) ; + my $dispdef = defined $def ? "[$def] " : " "; + $def = defined $def ? $def : ""; + + if (!$self->{prompt} || (!$isa_tty && eof STDIN)) { + return $def; + } + + local $|=1; + local $\; + my $ans; + eval { + local $SIG{ALRM} = sub { undef $ans; die "alarm\n" }; + print STDOUT "$mess $dispdef"; + alarm $self->{prompt_timeout} if $self->{prompt_timeout}; + $ans = <STDIN>; + alarm 0; + }; + if ( defined $ans ) { + chomp $ans; + } else { # user hit ctrl-D or alarm timeout + print STDOUT "\n"; + } + + return (!defined $ans || $ans eq '') ? $def : $ans; + } + + sub diag_ok { + my($self, $msg) = @_; + chomp $msg; + $msg ||= "OK"; + if ($self->{in_progress}) { + $self->_diag("$msg\n"); + $self->{in_progress} = 0; + } + $self->log("-> $msg\n"); + } + + sub diag_fail { + my($self, $msg, $always) = @_; + chomp $msg; + if ($self->{in_progress}) { + $self->_diag("FAIL\n"); + $self->{in_progress} = 0; + } + + if ($msg) { + $self->_diag("! $msg\n", $always); + $self->log("-> FAIL $msg\n"); + } + } + + sub diag_progress { + my($self, $msg) = @_; + chomp $msg; + $self->{in_progress} = 1; + $self->_diag("$msg ... "); + $self->log("$msg\n"); + } + + sub _diag { + my($self, $msg, $always) = @_; + print STDERR $msg if $always or $self->{verbose} or !$self->{quiet}; + } + + sub diag { + my($self, $msg, $always) = @_; + $self->_diag($msg, $always); + $self->log($msg); + } + + sub chat { + my $self = shift; + print STDERR @_ if $self->{verbose}; + $self->log(@_); + } + + sub log { + my $self = shift; + open my $out, ">>$self->{log}"; + print $out @_; + } + + sub run { + my($self, $cmd) = @_; + + if (WIN32 && ref $cmd eq 'ARRAY') { + $cmd = join q{ }, map { $self->shell_quote($_) } @$cmd; + } + + if (ref $cmd eq 'ARRAY') { + my $pid = fork; + if ($pid) { + waitpid $pid, 0; + return !$?; + } else { + $self->run_exec($cmd); + } + } else { + unless ($self->{verbose}) { + $cmd .= " >> " . $self->shell_quote($self->{log}) . " 2>&1"; + } + !system $cmd; + } + } + + sub run_exec { + my($self, $cmd) = @_; + + if (ref $cmd eq 'ARRAY') { + unless ($self->{verbose}) { + open my $logfh, ">>", $self->{log}; + open STDERR, '>&', $logfh; + open STDOUT, '>&', $logfh; + close $logfh; + } + exec @$cmd; + } else { + unless ($self->{verbose}) { + $cmd .= " >> " . $self->shell_quote($self->{log}) . " 2>&1"; + } + exec $cmd; + } + } + + sub run_timeout { + my($self, $cmd, $timeout) = @_; + return $self->run($cmd) if WIN32 || $self->{verbose} || !$timeout; + + my $pid = fork; + if ($pid) { + eval { + local $SIG{ALRM} = sub { die "alarm\n" }; + alarm $timeout; + waitpid $pid, 0; + alarm 0; + }; + if ($@ && $@ eq "alarm\n") { + $self->diag_fail("Timed out (> ${timeout}s). Use --verbose to retry."); + local $SIG{TERM} = 'IGNORE'; + kill TERM => 0; + waitpid $pid, 0; + return; + } + return !$?; + } elsif ($pid == 0) { + $self->run_exec($cmd); + } else { + $self->chat("! fork failed: falling back to system()\n"); + $self->run($cmd); + } + } + + sub configure { + my($self, $cmd) = @_; + + # trick AutoInstall + local $ENV{PERL5_CPAN_IS_RUNNING} = local $ENV{PERL5_CPANPLUS_IS_RUNNING} = $$; + + # e.g. skip CPAN configuration on local::lib + local $ENV{PERL5_CPANM_IS_RUNNING} = $$; + + my $use_default = !$self->{interactive}; + local $ENV{PERL_MM_USE_DEFAULT} = $use_default; + + # skip man page generation + local $ENV{PERL_MM_OPT} = $ENV{PERL_MM_OPT}; + unless ($self->{pod2man}) { + $ENV{PERL_MM_OPT} .= " INSTALLMAN1DIR=none INSTALLMAN3DIR=none"; + } + + local $self->{verbose} = $self->{verbose} || $self->{interactive}; + $self->run_timeout($cmd, $self->{configure_timeout}); + } + + sub build { + my($self, $cmd, $distname) = @_; + + return 1 if $self->run_timeout($cmd, $self->{build_timeout}); + while (1) { + my $ans = lc $self->prompt("Building $distname failed.\nYou can s)kip, r)etry, e)xamine build log, or l)ook ?", "s"); + return if $ans eq 's'; + return $self->build($cmd, $distname) if $ans eq 'r'; + $self->show_build_log if $ans eq 'e'; + $self->look if $ans eq 'l'; + } + } + + sub test { + my($self, $cmd, $distname) = @_; + return 1 if $self->{notest}; + + # https://rt.cpan.org/Ticket/Display.html?id=48965#txn-1013385 + local $ENV{PERL_MM_USE_DEFAULT} = 1; + + return 1 if $self->run_timeout($cmd, $self->{test_timeout}); + if ($self->{force}) { + $self->diag_fail("Testing $distname failed but installing it anyway."); + return 1; + } else { + $self->diag_fail; + while (1) { + my $ans = lc $self->prompt("Testing $distname failed.\nYou can s)kip, r)etry, f)orce install, e)xamine build log, or l)ook ?", "s"); + return if $ans eq 's'; + return $self->test($cmd, $distname) if $ans eq 'r'; + return 1 if $ans eq 'f'; + $self->show_build_log if $ans eq 'e'; + $self->look if $ans eq 'l'; + } + } + } + + sub install { + my($self, $cmd, $uninst_opts) = @_; + + if ($self->{sudo}) { + unshift @$cmd, "sudo"; + } + + if ($self->{uninstall_shadows} && !$ENV{PERL_MM_OPT}) { + push @$cmd, @$uninst_opts; + } + + $self->run($cmd); + } + + sub look { + my $self = shift; + + my $shell = $ENV{SHELL}; + $shell ||= $ENV{COMSPEC} if WIN32; + if ($shell) { + my $cwd = Cwd::cwd; + $self->diag("Entering $cwd with $shell\n"); + system $shell; + } else { + $self->diag_fail("You don't seem to have a SHELL :/"); + } + } + + sub show_build_log { + my $self = shift; + + my @pagers = ( + $ENV{PAGER}, + (WIN32 ? () : ('less')), + 'more' + ); + my $pager; + while (@pagers) { + $pager = shift @pagers; + next unless $pager; + $pager = $self->which($pager); + next unless $pager; + last; + } + + if ($pager) { + # win32 'more' doesn't allow "more build.log", the < is required + system("$pager < $self->{log}"); + } + else { + $self->diag_fail("You don't seem to have a PAGER :/"); + } + } + + sub chdir { + my $self = shift; + Cwd::chdir(File::Spec->canonpath($_[0])) or die "$_[0]: $!"; + } + + sub configure_mirrors { + my $self = shift; + unless (@{$self->{mirrors}}) { + $self->{mirrors} = [ 'http://search.cpan.org/CPAN' ]; + } + for (@{$self->{mirrors}}) { + s!^/!file:///!; + s!/$!!; + } + } + + sub self_upgrade { + my $self = shift; + $self->{argv} = [ 'App::cpanminus' ]; + return; # continue + } + + sub install_module { + my($self, $module, $depth, $version) = @_; + + if ($self->{seen}{$module}++) { + $self->chat("Already tried $module. Skipping.\n"); + return 1; + } + + my $dist = $self->resolve_name($module, $version); + unless ($dist) { + $self->diag_fail("Couldn't find module or a distribution $module ($version)", 1); + return; + } + + if ($dist->{distvname} && $self->{seen}{$dist->{distvname}}++) { + $self->chat("Already tried $dist->{distvname}. Skipping.\n"); + return 1; + } + + if ($self->{cmd} eq 'info') { + print $self->format_dist($dist), "\n"; + return 1; + } + + $self->check_libs; + $self->setup_module_build_patch unless $self->{pod2man}; + + if ($dist->{module}) { + my($ok, $local) = $self->check_module($dist->{module}, $dist->{module_version} || 0); + if ($self->{skip_installed} && $ok) { + $self->diag("$dist->{module} is up to date. ($local)\n", 1); + return 1; + } + } + + if ($dist->{dist} eq 'perl'){ + $self->diag("skipping $dist->{pathname}\n"); + return 1; + } + + $self->diag("--> Working on $module\n"); + + $dist->{dir} ||= $self->fetch_module($dist); + + unless ($dist->{dir}) { + $self->diag_fail("Failed to fetch distribution $dist->{distvname}", 1); + return; + } + + $self->chat("Entering $dist->{dir}\n"); + $self->chdir($self->{base}); + $self->chdir($dist->{dir}); + + if ($self->{cmd} eq 'look') { + $self->look; + return 1; + } + + return $self->build_stuff($module, $dist, $depth); + } + + sub format_dist { + my($self, $dist) = @_; + + # TODO support --dist-format? + return "$dist->{cpanid}/$dist->{filename}"; + } + + sub fetch_module { + my($self, $dist) = @_; + + $self->chdir($self->{base}); + + for my $uri (@{$dist->{uris}}) { + $self->diag_progress("Fetching $uri"); + + # Ugh, $dist->{filename} can contain sub directory + my $filename = $dist->{filename} || $uri; + my $name = File::Basename::basename($filename); + + my $cancelled; + my $fetch = sub { + my $file; + eval { + local $SIG{INT} = sub { $cancelled = 1; die "SIGINT\n" }; + $self->mirror($uri, $name); + $file = $name if -e $name; + }; + $self->chat("$@") if $@ && $@ ne "SIGINT\n"; + return $file; + }; + + my($try, $file); + while ($try++ < 3) { + $file = $fetch->(); + last if $cancelled or $file; + $self->diag_fail("Download $uri failed. Retrying ... "); + } + + if ($cancelled) { + $self->diag_fail("Download cancelled."); + return; + } + + unless ($file) { + $self->diag_fail("Failed to download $uri"); + next; + } + + $self->diag_ok; + $dist->{local_path} = File::Spec->rel2abs($name); + + my $dir = $self->unpack($file); + next unless $dir; # unpack failed + + if (my $save = $self->{save_dists}) { + my $path = "$save/authors/id/$dist->{pathname}"; + $self->chat("Copying $name to $path\n"); + File::Path::mkpath([ File::Basename::dirname($path) ], 0, 0777); + File::Copy::copy($file, $path) or warn $!; + } + + return $dist, $dir; + } + } + + sub unpack { + my($self, $file) = @_; + $self->chat("Unpacking $file\n"); + my $dir = $file =~ /\.zip/i ? $self->unzip($file) : $self->untar($file); + unless ($dir) { + $self->diag_fail("Failed to unpack $file: no directory"); + } + return $dir; + } + + sub resolve_name { + my($self, $module, $version) = @_; + + # URL + if ($module =~ /^(ftp|https?|file):/) { + if ($module =~ m!authors/id/!) { + return $self->cpan_dist($module, $module); + } else { + return { uris => [ $module ] }; + } + } + + # Directory + if ($module =~ m!^[\./]! && -d $module) { + return { + source => 'local', + dir => Cwd::abs_path($module), + }; + } + + # File + if (-f $module) { + return { + source => 'local', + uris => [ "file://" . Cwd::abs_path($module) ], + }; + } + + # cpan URI + if ($module =~ s!^cpan:///distfile/!!) { + return $self->cpan_dist($module); + } + + # PAUSEID/foo + if ($module =~ m!([A-Z]{3,})/!) { + return $self->cpan_dist($module); + } + + # Module name + return $self->search_module($module, $version); + } + + sub cpan_module { + my($self, $module, $dist, $version) = @_; + + my $dist = $self->cpan_dist($dist); + $dist->{module} = $module; + $dist->{module_version} = $version if $version && $version ne 'undef'; + + return $dist; + } + + sub cpan_dist { + my($self, $dist, $url) = @_; + + $dist =~ s!^([A-Z]{3})!substr($1,0,1)."/".substr($1,0,2)."/".$1!e; + + require CPAN::DistnameInfo; + my $d = CPAN::DistnameInfo->new($dist); + + if ($url) { + $url = [ $url ] unless ref $url eq 'ARRAY'; + } else { + my $id = $d->cpanid; + my $fn = substr($id, 0, 1) . "/" . substr($id, 0, 2) . "/" . $id . "/" . $d->filename; + + my @mirrors = @{$self->{mirrors}}; + my @urls = map "$_/authors/id/$fn", @mirrors; + + $url = \@urls, + } + + return { + $d->properties, + source => 'cpan', + uris => $url, + }; + } + + sub setup_module_build_patch { + my $self = shift; + + open my $out, ">$self->{base}/ModuleBuildSkipMan.pm" or die $!; + print $out <<EOF; + package ModuleBuildSkipMan; + CHECK { + if (%Module::Build::) { + no warnings 'redefine'; + *Module::Build::Base::ACTION_manpages = sub {}; + *Module::Build::Base::ACTION_docs = sub {}; + } + } + 1; + EOF + } + + sub check_module { + my($self, $mod, $want_ver) = @_; + + require Module::Metadata; + my $meta = Module::Metadata->new_from_module($mod, inc => $self->{search_inc}) + or return 0, undef; + + my $version = $meta->version; + + # When -L is in use, the version loaded from 'perl' library path + # might be newer than (or actually wasn't core at) the version + # that is shipped with the current perl + if ($self->{self_contained} && $self->loaded_from_perl_lib($meta)) { + require Module::CoreList; + unless (exists $Module::CoreList::version{$]+0}{$mod}) { + return 0, undef; + } + $version = $Module::CoreList::version{$]+0}{$mod}; + } + + $self->{local_versions}{$mod} = $version; + + if ($self->is_deprecated($meta)){ + return 0, $version; + } elsif (!$want_ver or $version >= version->new($want_ver)) { + return 1, ($version || 'undef'); + } else { + return 0, $version; + } + } + + sub is_deprecated { + my($self, $meta) = @_; + + my $deprecated = eval { + require Module::CoreList; + Module::CoreList::is_deprecated($meta->{module}); + }; + + return unless $deprecated; + return $self->loaded_from_perl_lib($meta); + } + + sub loaded_from_perl_lib { + my($self, $meta) = @_; + + require Config; + for my $dir (qw(archlibexp privlibexp)) { + my $confdir = $Config{$dir}; + if ($confdir eq substr($meta->filename, 0, length($confdir))) { + return 1; + } + } + + return; + } + + sub should_install { + my($self, $mod, $ver) = @_; + + $self->chat("Checking if you have $mod $ver ... "); + my($ok, $local) = $self->check_module($mod, $ver); + + if ($ok) { $self->chat("Yes ($local)\n") } + elsif ($local) { $self->chat("No ($local < $ver)\n") } + else { $self->chat("No\n") } + + return $mod unless $ok; + return; + } + + sub install_deps { + my($self, $dir, $depth, @deps) = @_; + + my(@install, %seen); + while (my($mod, $ver) = splice @deps, 0, 2) { + next if $seen{$mod} or $mod eq 'perl' or $mod eq 'Config'; + if ($self->should_install($mod, $ver)) { + push @install, [ $mod, $ver ]; + $seen{$mod} = 1; + } + } + + if (@install) { + $self->diag("==> Found dependencies: " . join(", ", map $_->[0], @install) . "\n"); + } + + my @fail; + for my $mod (@install) { + $self->install_module($mod->[0], $depth + 1, $mod->[1]) + or push @fail, $mod->[0]; + } + + $self->chdir($self->{base}); + $self->chdir($dir) if $dir; + + return @fail; + } + + sub install_deps_bailout { + my($self, $target, $dir, $depth, @deps) = @_; + + my @fail = $self->install_deps($dir, $depth, @deps); + if (@fail) { + unless ($self->prompt_bool("Installing the following dependencies failed:\n==> " . + join(", ", @fail) . "\nDo you want to continue building $target anyway?", "n")) { + $self->diag_fail("Bailing out the installation for $target. Retry with --prompt or --force.", 1); + return; + } + } + + return 1; + } + + sub build_stuff { + my($self, $stuff, $dist, $depth) = @_; + + my @config_deps; + if (!%{$dist->{meta} || {}} && -e 'META.yml') { + $self->chat("Checking configure dependencies from META.yml\n"); + $dist->{meta} = $self->parse_meta('META.yml'); + } + + if (!$dist->{meta} && $dist->{source} eq 'cpan') { + $self->chat("META.yml not found or unparsable. Fetching META.yml from search.cpan.org\n"); + $dist->{meta} = $self->fetch_meta_sco($dist); + } + + $dist->{meta} ||= {}; + + push @config_deps, %{$dist->{meta}{configure_requires} || {}}; + + my $target = $dist->{meta}{name} ? "$dist->{meta}{name}-$dist->{meta}{version}" : $dist->{dir}; + + $self->install_deps_bailout($target, $dist->{dir}, $depth, @config_deps) + or return; + + $self->diag_progress("Configuring $target"); + + my $configure_state = $self->configure_this($dist); + + $self->diag_ok($configure_state->{configured_ok} ? "OK" : "N/A"); + + my @deps = $self->find_prereqs($dist); + my $module_name = $self->find_module_name($configure_state) || $dist->{meta}{name}; + $module_name =~ s/-/::/g; + + if ($self->{showdeps}) { + my %rootdeps = (@config_deps, @deps); # merge + for my $mod (keys %rootdeps) { + my $ver = $rootdeps{$mod}; + print $mod, ($ver ? "~$ver" : ""), "\n"; + } + return 1; + } + + my $distname = $dist->{meta}{name} ? "$dist->{meta}{name}-$dist->{meta}{version}" : $stuff; + + my $walkup; + if ($self->{scandeps}) { + $walkup = $self->scandeps_append_child($dist); + } + + $self->install_deps_bailout($distname, $dist->{dir}, $depth, @deps) + or return; + + if ($self->{scandeps}) { + unless ($configure_state->{configured_ok}) { + my $diag = <<DIAG; + ! Configuring $distname failed. See $self->{log} for details. + ! You might have to install the following modules first to get --scandeps working correctly. + DIAG + if (@config_deps) { + my @tree = @{$self->{scandeps_tree}}; + $diag .= "!\n" . join("", map "! * $_->[0]{module}\n", @tree[0..$#tree-1]) if @tree; + } + $self->diag("!\n$diag!\n", 1); + } + $walkup->(); + return 1; + } + + if ($self->{installdeps} && $depth == 0) { + if ($configure_state->{configured_ok}) { + $self->diag("<== Installed dependencies for $stuff. Finishing.\n"); + return 1; + } else { + $self->diag("! Configuring $distname failed. See $self->{log} for details.\n", 1); + return; + } + } + + my $installed; + if ($configure_state->{use_module_build} && -e 'Build' && -f _) { + my @switches = $self->{pod2man} ? () : ("-I$self->{base}", "-MModuleBuildSkipMan"); + $self->diag_progress("Building " . ($self->{notest} ? "" : "and testing ") . $distname); + $self->build([ $self->{perl}, @switches, "./Build" ], $distname) && + $self->test([ $self->{perl}, "./Build", "test" ], $distname) && + $self->install([ $self->{perl}, @switches, "./Build", "install" ], [ "--uninst", 1 ]) && + $installed++; + } elsif ($self->{make} && -e 'Makefile') { + $self->diag_progress("Building " . ($self->{notest} ? "" : "and testing ") . $distname); + $self->build([ $self->{make} ], $distname) && + $self->test([ $self->{make}, "test" ], $distname) && + $self->install([ $self->{make}, "install" ], [ "UNINST=1" ]) && + $installed++; + } else { + my $why; + my $configure_failed = $configure_state->{configured} && !$configure_state->{configured_ok}; + if ($configure_failed) { $why = "Configure failed for $distname." } + elsif ($self->{make}) { $why = "The distribution doesn't have a proper Makefile.PL/Build.PL" } + else { $why = "Can't configure the distribution. You probably need to have 'make'." } + + $self->diag_fail("$why See $self->{log} for details.", 1); + return; + } + + if ($installed) { + my $local = $self->{local_versions}{$dist->{module} || ''}; + my $version = $dist->{module_version} || $dist->{meta}{version} || $dist->{version}; + my $reinstall = $local && ($local eq $version); + + my $how = $reinstall ? "reinstalled $distname" + : $local ? "installed $distname (upgraded from $local)" + : "installed $distname" ; + my $msg = "Successfully $how"; + $self->diag_ok; + $self->diag("$msg\n", 1); + $self->{installed_dists}++; + $self->save_meta($stuff, $dist, $module_name, \@config_deps, \@deps); + return 1; + } else { + my $msg = "Building $distname failed"; + $self->diag_fail("Installing $stuff failed. See $self->{log} for details.", 1); + return; + } + } + + sub configure_this { + my($self, $dist) = @_; + + if ($self->{skip_configure}) { + my $eumm = -e 'Makefile'; + my $mb = -e 'Build' && -f _; + return { + configured => 1, + configured_ok => $eumm || $mb, + use_module_build => $mb, + }; + } + + my @mb_switches; + unless ($self->{pod2man}) { + # it has to be push, so Module::Build is loaded from the adjusted path when -L is in use + push @mb_switches, ("-I$self->{base}", "-MModuleBuildSkipMan"); + } + + my $state = {}; + + my $try_eumm = sub { + if (-e 'Makefile.PL') { + $self->chat("Running Makefile.PL\n"); + + # NOTE: according to Devel::CheckLib, most XS modules exit + # with 0 even if header files are missing, to avoid receiving + # tons of FAIL reports in such cases. So exit code can't be + # trusted if it went well. + if ($self->configure([ $self->{perl}, "Makefile.PL" ])) { + $state->{configured_ok} = -e 'Makefile'; + } + $state->{configured}++; + } + }; + + my $try_mb = sub { + if (-e 'Build.PL') { + $self->chat("Running Build.PL\n"); + if ($self->configure([ $self->{perl}, @mb_switches, "Build.PL" ])) { + $state->{configured_ok} = -e 'Build' && -f _; + } + $state->{use_module_build}++; + $state->{configured}++; + } + }; + + # Module::Build deps should use MakeMaker because that causes circular deps and fail + # Otherwise we should prefer Build.PL + my %should_use_mm = map { $_ => 1 } qw( version ExtUtils-ParseXS ExtUtils-Install ExtUtils-Manifest ); + + my @try; + if ($dist->{dist} && $should_use_mm{$dist->{dist}}) { + @try = ($try_eumm, $try_mb); + } else { + @try = ($try_mb, $try_eumm); + } + + for my $try (@try) { + $try->(); + last if $state->{configured_ok}; + } + + unless ($state->{configured_ok}) { + while (1) { + my $ans = lc $self->prompt("Configuring $dist->{dist} failed.\nYou can s)kip, r)etry, e)xamine build log, or l)ook ?", "s"); + last if $ans eq 's'; + return $self->configure_this($dist) if $ans eq 'r'; + $self->show_build_log if $ans eq 'e'; + $self->look if $ans eq 'l'; + } + } + + return $state; + } + + sub find_module_name { + my($self, $state) = @_; + + return unless $state->{configured_ok}; + + if ($state->{use_module_build} && + -e "_build/build_params") { + my $params = do { open my $in, "_build/build_params"; $self->safe_eval(join "", <$in>) }; + return eval { $params->[2]{module_name} } || undef; + } elsif (-e "Makefile") { + open my $mf, "Makefile"; + while (<$mf>) { + if (/^\#\s+NAME\s+=>\s+(.*)/) { + return $self->safe_eval($1); + } + } + } + + return; + } + + sub save_meta { + my($self, $module, $dist, $module_name, $config_deps, $build_deps) = @_; + + return unless $dist->{distvname} && $dist->{source} eq 'cpan'; + + my $base = ($ENV{PERL_MM_OPT} || '') =~ /INSTALL_BASE=/ + ? ($self->install_base($ENV{PERL_MM_OPT}) . "/lib/perl5") : $Config{sitelibexp}; + + my $provides = $self->_merge_hashref( + map Module::Metadata->package_versions_from_directory($_), + qw( blib/lib blib/arch ) # FCGI.pm :( + ); + + mkdir "blib/meta", 0777 or die $!; + + my $local = { + name => $module_name, + module => $module, + version => $provides->{$module}{version} || $dist->{version}, + dist => $dist->{distvname}, + pathname => $dist->{pathname}, + provides => $provides, + }; + + require JSON::PP; + open my $fh, ">", "blib/meta/install.json" or die $!; + print $fh JSON::PP::encode_json($local); + + # Existence of MYMETA.* Depends on EUMM/M::B versions and CPAN::Meta + if (-e "MYMETA.json") { + File::Copy::copy("MYMETA.json", "blib/meta/MYMETA.json"); + } + + my @cmd = ( + ($self->{sudo} ? 'sudo' : ()), + $^X, + '-MExtUtils::Install=install', + '-e', + qq[install({ 'blib/meta' => '$base/$Config{archname}/.meta/$dist->{distvname}' })], + ); + $self->run(\@cmd); + } + + sub _merge_hashref { + my($self, @hashrefs) = @_; + + my %hash; + for my $h (@hashrefs) { + %hash = (%hash, %$h); + } + + return \%hash; + } + + sub install_base { + my($self, $mm_opt) = @_; + $mm_opt =~ /INSTALL_BASE=(\S+)/ and return $1; + die "Your PERL_MM_OPT doesn't contain INSTALL_BASE"; + } + + sub safe_eval { + my($self, $code) = @_; + eval $code; + } + + sub find_prereqs { + my($self, $dist) = @_; + + my @deps = $self->extract_meta_prereqs($dist); + + if ($dist->{module} =~ /^Bundle::/i) { + push @deps, $self->bundle_deps($dist); + } + + return @deps; + } + + sub extract_meta_prereqs { + my($self, $dist) = @_; + + my $meta = $dist->{meta}; + + my @deps; + if (-e "MYMETA.json") { + require JSON::PP; + $self->chat("Checking dependencies from MYMETA.json ...\n"); + my $json = do { open my $in, "<MYMETA.json"; local $/; <$in> }; + my $mymeta = JSON::PP::decode_json($json); + if ($mymeta) { + $meta->{$_} = $mymeta->{$_} for qw(name version); + return $self->extract_requires($mymeta); + } + } + + if (-e 'MYMETA.yml') { + $self->chat("Checking dependencies from MYMETA.yml ...\n"); + my $mymeta = $self->parse_meta('MYMETA.yml'); + if ($mymeta) { + $meta->{$_} = $mymeta->{$_} for qw(name version); + return $self->extract_requires($mymeta); + } + } + + if (-e '_build/prereqs') { + $self->chat("Checking dependencies from _build/prereqs ...\n"); + my $mymeta = do { open my $in, "_build/prereqs"; $self->safe_eval(join "", <$in>) }; + @deps = $self->extract_requires($mymeta); + } elsif (-e 'Makefile') { + $self->chat("Finding PREREQ from Makefile ...\n"); + open my $mf, "Makefile"; + while (<$mf>) { + if (/^\#\s+PREREQ_PM => {\s*(.*?)\s*}/) { + my @all; + my @pairs = split ', ', $1; + for (@pairs) { + my ($pkg, $v) = split '=>', $_; + push @all, [ $pkg, $v ]; + } + my $list = join ", ", map { "'$_->[0]' => $_->[1]" } @all; + my $prereq = $self->safe_eval("no strict; +{ $list }"); + push @deps, %$prereq if $prereq; + last; + } + } + } + + return @deps; + } + + sub bundle_deps { + my($self, $dist) = @_; + + my @files; + File::Find::find({ + wanted => sub { push @files, File::Spec->rel2abs($_) if /\.pm/i }, + no_chdir => 1, + }, '.'); + + my @deps; + + for my $file (@files) { + open my $pod, "<", $file or next; + my $in_contents; + while (<$pod>) { + if (/^=head\d\s+CONTENTS/) { + $in_contents = 1; + } elsif (/^=/) { + $in_contents = 0; + } elsif ($in_contents) { + /^(\S+)\s*(\S+)?/ + and push @deps, $1, $self->maybe_version($2); + } + } + } + + return @deps; + } + + sub maybe_version { + my($self, $string) = @_; + return $string && $string =~ /^\.?\d/ ? $string : undef; + } + + sub extract_requires { + my($self, $meta) = @_; + + if ($meta->{'meta-spec'} && $meta->{'meta-spec'}{version} == 2) { + my @phase = $self->{notest} ? qw( build runtime ) : qw( build test runtime ); + my @deps = map { + my $p = $meta->{prereqs}{$_} || {}; + %{$p->{requires} || {}}; + } @phase; + return @deps; + } + + my @deps; + push @deps, %{$meta->{build_requires}} if $meta->{build_requires}; + push @deps, %{$meta->{requires}} if $meta->{requires}; + + return @deps; + } + + sub cleanup_workdirs { + my $self = shift; + + my $expire = time - 24 * 60 * 60 * $self->{auto_cleanup}; + my @targets; + + opendir my $dh, "$self->{home}/work"; + while (my $e = readdir $dh) { + next if $e !~ /^(\d+)\.\d+$/; # {UNIX time}.{PID} + my $time = $1; + if ($time < $expire) { + push @targets, "$self->{home}/work/$e"; + } + } + + if (@targets) { + $self->chat("Expiring ", scalar(@targets), " work directories.\n"); + File::Path::rmtree(\@targets, 0, 0); # safe = 0, since blib usually doesn't have write bits + } + } + + sub scandeps_append_child { + my($self, $dist) = @_; + + my $new_node = [ $dist, [] ]; + + my $curr_node = $self->{scandeps_current} || [ undef, $self->{scandeps_tree} ]; + push @{$curr_node->[1]}, $new_node; + + $self->{scandeps_current} = $new_node; + + return sub { $self->{scandeps_current} = $curr_node }; + } + + sub dump_scandeps { + my $self = shift; + + if ($self->{format} eq 'tree') { + $self->walk_down(sub { + my($dist, $depth) = @_; + if ($depth == 0) { + print "$dist->{distvname}\n"; + } else { + print " " x ($depth - 1); + print "\\_ $dist->{distvname}\n"; + } + }, 1); + } elsif ($self->{format} =~ /^dists?$/) { + $self->walk_down(sub { + my($dist, $depth) = @_; + print $self->format_dist($dist), "\n"; + }, 0); + } elsif ($self->{format} eq 'json') { + require JSON::PP; + print JSON::PP::encode_json($self->{scandeps_tree}); + } elsif ($self->{format} eq 'yaml') { + require YAML; + print YAML::Dump($self->{scandeps_tree}); + } else { + $self->diag("Unknown format: $self->{format}\n"); + } + } + + sub walk_down { + my($self, $cb, $pre) = @_; + $self->_do_walk_down($self->{scandeps_tree}, $cb, 0, $pre); + } + + sub _do_walk_down { + my($self, $children, $cb, $depth, $pre) = @_; + + # DFS - $pre determines when we call the callback + for my $node (@$children) { + $cb->($node->[0], $depth) if $pre; + $self->_do_walk_down($node->[1], $cb, $depth + 1, $pre); + $cb->($node->[0], $depth) unless $pre; + } + } + + sub DESTROY { + my $self = shift; + $self->{at_exit}->($self) if $self->{at_exit}; + } + + # Utils + + sub shell_quote { + my($self, $stuff) = @_; + $stuff =~ /^${quote}.+${quote}$/ ? $stuff : ($quote . $stuff . $quote); + } + + sub which { + my($self, $name) = @_; + my $exe_ext = $Config{_exe}; + for my $dir (File::Spec->path) { + my $fullpath = File::Spec->catfile($dir, $name); + if (-x $fullpath || -x ($fullpath .= $exe_ext)) { + if ($fullpath =~ /\s/ && $fullpath !~ /^$quote/) { + $fullpath = $self->shell_quote($fullpath); + } + return $fullpath; + } + } + return; + } + + sub get { $_[0]->{_backends}{get}->(@_) }; + sub mirror { $_[0]->{_backends}{mirror}->(@_) }; + sub untar { $_[0]->{_backends}{untar}->(@_) }; + sub unzip { $_[0]->{_backends}{unzip}->(@_) }; + + sub file_get { + my($self, $uri) = @_; + open my $fh, "<$uri" or return; + join '', <$fh>; + } + + sub file_mirror { + my($self, $uri, $path) = @_; + File::Copy::copy($uri, $path); + } + + sub init_tools { + my $self = shift; + + return if $self->{initialized}++; + + if ($self->{make} = $self->which($Config{make})) { + $self->chat("You have make $self->{make}\n"); + } + + # use --no-lwp if they have a broken LWP, to upgrade LWP + if ($self->{try_lwp} && eval { require LWP::UserAgent; LWP::UserAgent->VERSION(5.802) }) { + $self->chat("You have LWP $LWP::VERSION\n"); + my $ua = sub { + LWP::UserAgent->new( + parse_head => 0, + env_proxy => 1, + agent => "cpanminus/$VERSION", + timeout => 30, + @_, + ); + }; + $self->{_backends}{get} = sub { + my $self = shift; + my $res = $ua->()->request(HTTP::Request->new(GET => $_[0])); + return unless $res->is_success; + return $res->decoded_content; + }; + $self->{_backends}{mirror} = sub { + my $self = shift; + my $res = $ua->()->mirror(@_); + $res->code; + }; + } elsif ($self->{try_wget} and my $wget = $self->which('wget')) { + $self->chat("You have $wget\n"); + $self->{_backends}{get} = sub { + my($self, $uri) = @_; + return $self->file_get($uri) if $uri =~ s!^file:/+!/!; + $self->safeexec( my $fh, $wget, $uri, ( $self->{verbose} ? () : '-q' ), '-O', '-' ) or die "wget $uri: $!"; + local $/; + <$fh>; + }; + $self->{_backends}{mirror} = sub { + my($self, $uri, $path) = @_; + return $self->file_mirror($uri, $path) if $uri =~ s!^file:/+!/!; + $self->safeexec( my $fh, $wget, '--retry-connrefused', $uri, ( $self->{verbose} ? () : '-q' ), '-O', $path ) or die "wget $uri: $!"; + local $/; + <$fh>; + }; + } elsif ($self->{try_curl} and my $curl = $self->which('curl')) { + $self->chat("You have $curl\n"); + $self->{_backends}{get} = sub { + my($self, $uri) = @_; + return $self->file_get($uri) if $uri =~ s!^file:/+!/!; + $self->safeexec( my $fh, $curl, '-L', ( $self->{verbose} ? () : '-s' ), $uri ) or die "curl $uri: $!"; + local $/; + <$fh>; + }; + $self->{_backends}{mirror} = sub { + my($self, $uri, $path) = @_; + return $self->file_mirror($uri, $path) if $uri =~ s!^file:/+!/!; + $self->safeexec( my $fh, $curl, '-L', $uri, ( $self->{verbose} ? () : '-s' ), '-#', '-o', $path ) or die "curl $uri: $!"; + local $/; + <$fh>; + }; + } else { + require HTTP::Tiny; + $self->chat("Falling back to HTTP::Tiny $HTTP::Tiny::VERSION\n"); + + $self->{_backends}{get} = sub { + my $self = shift; + my $res = HTTP::Tiny->new->get($_[0]); + return unless $res->{success}; + return $res->{content}; + }; + $self->{_backends}{mirror} = sub { + my $self = shift; + my $res = HTTP::Tiny->new->mirror(@_); + return $res->{status}; + }; + } + + my $tar = $self->which('tar'); + my $tar_ver; + my $maybe_bad_tar = sub { WIN32 || SUNOS || (($tar_ver = `$tar --version 2>/dev/null`) =~ /GNU.*1\.13/i) }; + + if ($tar && !$maybe_bad_tar->()) { + chomp $tar_ver; + $self->chat("You have $tar: $tar_ver\n"); + $self->{_backends}{untar} = sub { + my($self, $tarfile) = @_; + + my $xf = "xf" . ($self->{verbose} ? 'v' : ''); + my $ar = $tarfile =~ /bz2$/ ? 'j' : 'z'; + + my($root, @others) = `$tar tf$ar $tarfile` + or return undef; + + chomp $root; + $root =~ s!^\./!!; + $root =~ s{^(.+?)/.*$}{$1}; + + system "$tar $xf$ar $tarfile"; + return $root if -d $root; + + $self->diag_fail("Bad archive: $tarfile"); + return undef; + } + } elsif ( $tar + and my $gzip = $self->which('gzip') + and my $bzip2 = $self->which('bzip2')) { + $self->chat("You have $tar, $gzip and $bzip2\n"); + $self->{_backends}{untar} = sub { + my($self, $tarfile) = @_; + + my $x = "x" . ($self->{verbose} ? 'v' : '') . "f -"; + my $ar = $tarfile =~ /bz2$/ ? $bzip2 : $gzip; + + my($root, @others) = `$ar -dc $tarfile | $tar tf -` + or return undef; + + chomp $root; + $root =~ s{^(.+?)/.*$}{$1}; + + system "$ar -dc $tarfile | $tar $x"; + return $root if -d $root; + + $self->diag_fail("Bad archive: $tarfile"); + return undef; + } + } elsif (eval { require Archive::Tar }) { # uses too much memory! + $self->chat("Falling back to Archive::Tar $Archive::Tar::VERSION\n"); + $self->{_backends}{untar} = sub { + my $self = shift; + my $t = Archive::Tar->new($_[0]); + my $root = ($t->list_files)[0]; + $root =~ s{^(.+?)/.*$}{$1}; + $t->extract; + return -d $root ? $root : undef; + }; + } else { + $self->{_backends}{untar} = sub { + die "Failed to extract $_[1] - You need to have tar or Archive::Tar installed.\n"; + }; + } + + if (my $unzip = $self->which('unzip')) { + $self->chat("You have $unzip\n"); + $self->{_backends}{unzip} = sub { + my($self, $zipfile) = @_; + + my $opt = $self->{verbose} ? '' : '-q'; + my(undef, $root, @others) = `$unzip -t $zipfile` + or return undef; + + chomp $root; + $root =~ s{^\s+testing:\s+(.+?)/\s+OK$}{$1}; + + system "$unzip $opt $zipfile"; + return $root if -d $root; + + $self->diag_fail("Bad archive: [$root] $zipfile"); + return undef; + } + } else { + $self->{_backends}{unzip} = sub { + eval { require Archive::Zip } + or die "Failed to extract $_[1] - You need to have unzip or Archive::Zip installed.\n"; + my($self, $file) = @_; + my $zip = Archive::Zip->new(); + my $status; + $status = $zip->read($file); + $self->diag_fail("Read of file[$file] failed") + if $status != Archive::Zip::AZ_OK(); + my @members = $zip->members(); + my $root; + for my $member ( @members ) { + my $af = $member->fileName(); + next if ($af =~ m!^(/|\.\./)!); + $root = $af unless $root; + $status = $member->extractToFileNamed( $af ); + $self->diag_fail("Extracting of file[$af] from zipfile[$file failed") + if $status != Archive::Zip::AZ_OK(); + } + return -d $root ? $root : undef; + }; + } + } + + sub safeexec { + my $self = shift; + my $rdr = $_[0] ||= Symbol::gensym(); + + if (WIN32) { + my $cmd = join q{ }, map { $self->shell_quote($_) } @_[ 1 .. $#_ ]; + return open( $rdr, "$cmd |" ); + } + + if ( my $pid = open( $rdr, '-|' ) ) { + return $pid; + } + elsif ( defined $pid ) { + exec( @_[ 1 .. $#_ ] ); + exit 1; + } + else { + return; + } + } + + sub parse_meta { + my($self, $file) = @_; + return eval { (Parse::CPAN::Meta::LoadFile($file))[0] } || undef; + } + + sub parse_meta_string { + my($self, $yaml) = @_; + return eval { (Parse::CPAN::Meta::Load($yaml))[0] } || undef; + } + + 1; +APP_CPANMINUS_SCRIPT + +$fatpacked{"CPAN/DistnameInfo.pm"} = <<'CPAN_DISTNAMEINFO'; + + package CPAN::DistnameInfo; + + $VERSION = "0.11"; + use strict; + + sub distname_info { + my $file = shift or return; + + my ($dist, $version) = $file =~ /^ + ((?:[-+.]*(?:[A-Za-z0-9]+|(?<=\D)_|_(?=\D))* + (?: + [A-Za-z](?=[^A-Za-z]|$) + | + \d(?=-) + )(?<![._-][vV]) + )+)(.*) + $/xs or return ($file,undef,undef); + + if ($dist =~ /-undef\z/ and ! length $version) { + $dist =~ s/-undef\z//; + } + + # Remove potential -withoutworldwriteables suffix + $version =~ s/-withoutworldwriteables$//; + + if ($version =~ /^(-[Vv].*)-(\d.*)/) { + + # Catch names like Unicode-Collate-Standard-V3_1_1-0.1 + # where the V3_1_1 is part of the distname + $dist .= $1; + $version = $2; + } + + # Normalize the Dist.pm-1.23 convention which CGI.pm and + # a few others use. + $dist =~ s{\.pm$}{}; + + $version = $1 + if !length $version and $dist =~ s/-(\d+\w)$//; + + $version = $1 . $version + if $version =~ /^\d+$/ and $dist =~ s/-(\w+)$//; + + if ($version =~ /\d\.\d/) { + $version =~ s/^[-_.]+//; + } + else { + $version =~ s/^[-_]+//; + } + + my $dev; + if (length $version) { + if ($file =~ /^perl-?\d+\.(\d+)(?:\D(\d+))?(-(?:TRIAL|RC)\d+)?$/) { + $dev = 1 if (($1 > 6 and $1 & 1) or ($2 and $2 >= 50)) or $3; + } + elsif ($version =~ /\d\D\d+_\d/ or $version =~ /-TRIAL/) { + $dev = 1; + } + } + else { + $version = undef; + } + + ($dist, $version, $dev); + } + + sub new { + my $class = shift; + my $distfile = shift; + + $distfile =~ s,//+,/,g; + + my %info = ( pathname => $distfile ); + + ($info{filename} = $distfile) =~ s,^(((.*?/)?authors/)?id/)?([A-Z])/(\4[A-Z])/(\5[-A-Z0-9]*)/,, + and $info{cpanid} = $6; + + if ($distfile =~ m,([^/]+)\.(tar\.(?:g?z|bz2)|zip|tgz)$,i) { # support more ? + $info{distvname} = $1; + $info{extension} = $2; + } + + @info{qw(dist version beta)} = distname_info($info{distvname}); + $info{maturity} = delete $info{beta} ? 'developer' : 'released'; + + return bless \%info, $class; + } + + sub dist { shift->{dist} } + sub version { shift->{version} } + sub maturity { shift->{maturity} } + sub filename { shift->{filename} } + sub cpanid { shift->{cpanid} } + sub distvname { shift->{distvname} } + sub extension { shift->{extension} } + sub pathname { shift->{pathname} } + + sub properties { %{ $_[0] } } + + 1; + + __END__ + +CPAN_DISTNAMEINFO + +$fatpacked{"CPAN/Meta.pm"} = <<'CPAN_META'; + use 5.006; + use strict; + use warnings; + package CPAN::Meta; + BEGIN { + $CPAN::Meta::VERSION = '2.110930'; + } + # ABSTRACT: the distribution metadata for a CPAN dist + + + use Carp qw(carp croak); + use CPAN::Meta::Feature; + use CPAN::Meta::Prereqs; + use CPAN::Meta::Converter; + use CPAN::Meta::Validator; + use Parse::CPAN::Meta 1.4400 (); + + sub _dclone { + my $ref = shift; + my $backend = Parse::CPAN::Meta->json_backend(); + return $backend->new->decode( + $backend->new->convert_blessed->encode($ref) + ); + } + + + BEGIN { + my @STRING_READERS = qw( + abstract + description + dynamic_config + generated_by + name + release_status + version + ); + + no strict 'refs'; + for my $attr (@STRING_READERS) { + *$attr = sub { $_[0]{ $attr } }; + } + } + + + BEGIN { + my @LIST_READERS = qw( + author + keywords + license + ); + + no strict 'refs'; + for my $attr (@LIST_READERS) { + *$attr = sub { + my $value = $_[0]{ $attr }; + croak "$attr must be called in list context" + unless wantarray; + return @{ _dclone($value) } if ref $value; + return $value; + }; + } + } + + sub authors { $_[0]->author } + sub licenses { $_[0]->license } + + + BEGIN { + my @MAP_READERS = qw( + meta-spec + resources + provides + no_index + + prereqs + optional_features + ); + + no strict 'refs'; + for my $attr (@MAP_READERS) { + (my $subname = $attr) =~ s/-/_/; + *$subname = sub { + my $value = $_[0]{ $attr }; + return _dclone($value) if $value; + return {}; + }; + } + } + + + sub custom_keys { + return grep { /^x_/i } keys %{$_[0]}; + } + + sub custom { + my ($self, $attr) = @_; + my $value = $self->{$attr}; + return _dclone($value) if ref $value; + return $value; + } + + + sub _new { + my ($class, $struct, $options) = @_; + my $self; + + if ( $options->{lazy_validation} ) { + # try to convert to a valid structure; if succeeds, then return it + my $cmc = CPAN::Meta::Converter->new( $struct ); + $self = $cmc->convert( version => 2 ); # valid or dies + return bless $self, $class; + } + else { + # validate original struct + my $cmv = CPAN::Meta::Validator->new( $struct ); + unless ( $cmv->is_valid) { + die "Invalid metadata structure. Errors: " + . join(", ", $cmv->errors) . "\n"; + } + } + + # up-convert older spec versions + my $version = $struct->{'meta-spec'}{version} || '1.0'; + if ( $version == 2 ) { + $self = $struct; + } + else { + my $cmc = CPAN::Meta::Converter->new( $struct ); + $self = $cmc->convert( version => 2 ); + } + + return bless $self, $class; + } + + sub new { + my ($class, $struct, $options) = @_; + my $self = eval { $class->_new($struct, $options) }; + croak($@) if $@; + return $self; + } + + + sub create { + my ($class, $struct, $options) = @_; + my $version = __PACKAGE__->VERSION || 2; + $struct->{generated_by} ||= __PACKAGE__ . " version $version" ; + $struct->{'meta-spec'}{version} ||= int($version); + my $self = eval { $class->_new($struct, $options) }; + croak ($@) if $@; + return $self; + } + + + sub load_file { + my ($class, $file, $options) = @_; + $options->{lazy_validation} = 1 unless exists $options->{lazy_validation}; + + croak "load_file() requires a valid, readable filename" + unless -r $file; + + my $self; + eval { + my $struct = Parse::CPAN::Meta->load_file( $file ); + $self = $class->_new($struct, $options); + }; + croak($@) if $@; + return $self; + } + + + sub load_yaml_string { + my ($class, $yaml, $options) = @_; + $options->{lazy_validation} = 1 unless exists $options->{lazy_validation}; + + my $self; + eval { + my ($struct) = Parse::CPAN::Meta->load_yaml_string( $yaml ); + $self = $class->_new($struct, $options); + }; + croak($@) if $@; + return $self; + } + + + sub load_json_string { + my ($class, $json, $options) = @_; + $options->{lazy_validation} = 1 unless exists $options->{lazy_validation}; + + my $self; + eval { + my $struct = Parse::CPAN::Meta->load_json_string( $json ); + $self = $class->_new($struct, $options); + }; + croak($@) if $@; + return $self; + } + + + sub save { + my ($self, $file, $options) = @_; + + my $version = $options->{version} || '2'; + my $layer = $] ge '5.008001' ? ':utf8' : ''; + + if ( $version ge '2' ) { + carp "'$file' should end in '.json'" + unless $file =~ m{\.json$}; + } + else { + carp "'$file' should end in '.yml'" + unless $file =~ m{\.yml$}; + } + + my $data = $self->as_string( $options ); + open my $fh, ">$layer", $file + or die "Error opening '$file' for writing: $!\n"; + + print {$fh} $data; + close $fh + or die "Error closing '$file': $!\n"; + + return 1; + } + + + sub meta_spec_version { + my ($self) = @_; + return $self->meta_spec->{version}; + } + + + sub effective_prereqs { + my ($self, $features) = @_; + $features ||= []; + + my $prereq = CPAN::Meta::Prereqs->new($self->prereqs); + + return $prereq unless @$features; + + my @other = map {; $self->feature($_)->prereqs } @$features; + + return $prereq->with_merged_prereqs(\@other); + } + + + sub should_index_file { + my ($self, $filename) = @_; + + for my $no_index_file (@{ $self->no_index->{file} || [] }) { + return if $filename eq $no_index_file; + } + + for my $no_index_dir (@{ $self->no_index->{directory} }) { + $no_index_dir =~ s{$}{/} unless $no_index_dir =~ m{/\z}; + return if index($filename, $no_index_dir) == 0; + } + + return 1; + } + + + sub should_index_package { + my ($self, $package) = @_; + + for my $no_index_pkg (@{ $self->no_index->{package} || [] }) { + return if $package eq $no_index_pkg; + } + + for my $no_index_ns (@{ $self->no_index->{namespace} }) { + return if index($package, "${no_index_ns}::") == 0; + } + + return 1; + } + + + sub features { + my ($self) = @_; + + my $opt_f = $self->optional_features; + my @features = map {; CPAN::Meta::Feature->new($_ => $opt_f->{ $_ }) } + keys %$opt_f; + + return @features; + } + + + sub feature { + my ($self, $ident) = @_; + + croak "no feature named $ident" + unless my $f = $self->optional_features->{ $ident }; + + return CPAN::Meta::Feature->new($ident, $f); + } + + + sub as_struct { + my ($self, $options) = @_; + my $struct = _dclone($self); + if ( $options->{version} ) { + my $cmc = CPAN::Meta::Converter->new( $struct ); + $struct = $cmc->convert( version => $options->{version} ); + } + return $struct; + } + + + sub as_string { + my ($self, $options) = @_; + + my $version = $options->{version} || '2'; + + my $struct; + if ( $self->meta_spec_version ne $version ) { + my $cmc = CPAN::Meta::Converter->new( $self->as_struct ); + $struct = $cmc->convert( version => $version ); + } + else { + $struct = $self->as_struct; + } + + my ($data, $backend); + if ( $version ge '2' ) { + $backend = Parse::CPAN::Meta->json_backend(); + $data = $backend->new->pretty->canonical->encode($struct); + } + else { + $backend = Parse::CPAN::Meta->yaml_backend(); + $data = eval { no strict 'refs'; &{"$backend\::Dump"}($struct) }; + if ( $@ ) { + croak $backend->can('errstr') ? $backend->errstr : $@ + } + } + + return $data; + } + + # Used by JSON::PP, etc. for "convert_blessed" + sub TO_JSON { + return { %{ $_[0] } }; + } + + 1; + + + + + __END__ + + +CPAN_META + +$fatpacked{"CPAN/Meta/Converter.pm"} = <<'CPAN_META_CONVERTER'; + use 5.006; + use strict; + use warnings; + package CPAN::Meta::Converter; + BEGIN { + $CPAN::Meta::Converter::VERSION = '2.110930'; + } + # ABSTRACT: Convert CPAN distribution metadata structures + + + use CPAN::Meta::Validator; + use version 0.82 (); + use Parse::CPAN::Meta 1.4400 (); + + sub _dclone { + my $ref = shift; + my $backend = Parse::CPAN::Meta->json_backend(); + return $backend->new->decode( + $backend->new->convert_blessed->encode($ref) + ); + } + + my %known_specs = ( + '2' => 'http://search.cpan.org/perldoc?CPAN::Meta::Spec', + '1.4' => 'http://module-build.sourceforge.net/META-spec-v1.4.html', + '1.3' => 'http://module-build.sourceforge.net/META-spec-v1.3.html', + '1.2' => 'http://module-build.sourceforge.net/META-spec-v1.2.html', + '1.1' => 'http://module-build.sourceforge.net/META-spec-v1.1.html', + '1.0' => 'http://module-build.sourceforge.net/META-spec-v1.0.html' + ); + + my @spec_list = sort { $a <=> $b } keys %known_specs; + my ($LOWEST, $HIGHEST) = @spec_list[0,-1]; + + #--------------------------------------------------------------------------# + # converters + # + # called as $converter->($element, $field_name, $full_meta, $to_version) + # + # defined return value used for field + # undef return value means field is skipped + #--------------------------------------------------------------------------# + + sub _keep { $_[0] } + + sub _keep_or_one { defined($_[0]) ? $_[0] : 1 } + + sub _keep_or_zero { defined($_[0]) ? $_[0] : 0 } + + sub _keep_or_unknown { defined($_[0]) && length($_[0]) ? $_[0] : "unknown" } + + sub _generated_by { + my $gen = shift; + my $sig = __PACKAGE__ . " version " . (__PACKAGE__->VERSION || "<dev>"); + + return $sig unless defined $gen and length $gen; + return $gen if $gen =~ /(, )\Q$sig/; + return "$gen, $sig"; + } + + sub _listify { ! defined $_[0] ? undef : ref $_[0] eq 'ARRAY' ? $_[0] : [$_[0]] } + + sub _prefix_custom { + my $key = shift; + $key =~ s/^(?!x_) # Unless it already starts with x_ + (?:x-?)? # Remove leading x- or x (if present) + /x_/ix; # and prepend x_ + return $key; + } + + sub _ucfirst_custom { + my $key = shift; + $key = ucfirst $key unless $key =~ /[A-Z]/; + return $key; + } + + sub _change_meta_spec { + my ($element, undef, undef, $version) = @_; + $element->{version} = $version; + $element->{url} = $known_specs{$version}; + return $element; + } + + my @valid_licenses_1 = ( + 'perl', + 'gpl', + 'apache', + 'artistic', + 'artistic_2', + 'lgpl', + 'bsd', + 'gpl', + 'mit', + 'mozilla', + 'open_source', + 'unrestricted', + 'restrictive', + 'unknown', + ); + + my %license_map_1 = ( + ( map { $_ => $_ } @valid_licenses_1 ), + artistic2 => 'artistic_2', + ); + + sub _license_1 { + my ($element) = @_; + return 'unknown' unless defined $element; + if ( $license_map_1{lc $element} ) { + return $license_map_1{lc $element}; + } + return 'unknown'; + } + + my @valid_licenses_2 = qw( + agpl_3 + apache_1_1 + apache_2_0 + artistic_1 + artistic_2 + bsd + freebsd + gfdl_1_2 + gfdl_1_3 + gpl_1 + gpl_2 + gpl_3 + lgpl_2_1 + lgpl_3_0 + mit + mozilla_1_0 + mozilla_1_1 + openssl + perl_5 + qpl_1_0 + ssleay + sun + zlib + open_source + restricted + unrestricted + unknown + ); + + # The "old" values were defined by Module::Build, and were often vague. I have + # made the decisions below based on reading Module::Build::API and how clearly + # it specifies the version of the license. + my %license_map_2 = ( + (map { $_ => $_ } @valid_licenses_2), + apache => 'apache_2_0', # clearly stated as 2.0 + artistic => 'artistic_1', # clearly stated as 1 + artistic2 => 'artistic_2', # clearly stated as 2 + gpl => 'open_source', # we don't know which GPL; punt + lgpl => 'open_source', # we don't know which LGPL; punt + mozilla => 'open_source', # we don't know which MPL; punt + perl => 'perl_5', # clearly Perl 5 + restrictive => 'restricted', + ); + + sub _license_2 { + my ($element) = @_; + return [ 'unknown' ] unless defined $element; + $element = [ $element ] unless ref $element eq 'ARRAY'; + my @new_list; + for my $lic ( @$element ) { + next unless defined $lic; + if ( my $new = $license_map_2{lc $lic} ) { + push @new_list, $new; + } + } + return @new_list ? \@new_list : [ 'unknown' ]; + } + + my %license_downgrade_map = qw( + agpl_3 open_source + apache_1_1 apache + apache_2_0 apache + artistic_1 artistic + artistic_2 artistic_2 + bsd bsd + freebsd open_source + gfdl_1_2 open_source + gfdl_1_3 open_source + gpl_1 gpl + gpl_2 gpl + gpl_3 gpl + lgpl_2_1 lgpl + lgpl_3_0 lgpl + mit mit + mozilla_1_0 mozilla + mozilla_1_1 mozilla + openssl open_source + perl_5 perl + qpl_1_0 open_source + ssleay open_source + sun open_source + zlib open_source + open_source open_source + restricted restrictive + unrestricted unrestricted + unknown unknown + ); + + sub _downgrade_license { + my ($element) = @_; + if ( ! defined $element ) { + return "unknown"; + } + elsif( ref $element eq 'ARRAY' ) { + if ( @$element == 1 ) { + return $license_downgrade_map{$element->[0]} || "unknown"; + } + } + elsif ( ! ref $element ) { + return $license_downgrade_map{$element} || "unknown"; + } + return "unknown"; + } + + my $no_index_spec_1_2 = { + 'file' => \&_listify, + 'dir' => \&_listify, + 'package' => \&_listify, + 'namespace' => \&_listify, + }; + + my $no_index_spec_1_3 = { + 'file' => \&_listify, + 'directory' => \&_listify, + 'package' => \&_listify, + 'namespace' => \&_listify, + }; + + my $no_index_spec_2 = { + 'file' => \&_listify, + 'directory' => \&_listify, + 'package' => \&_listify, + 'namespace' => \&_listify, + ':custom' => \&_prefix_custom, + }; + + sub _no_index_1_2 { + my (undef, undef, $meta) = @_; + my $no_index = $meta->{no_index} || $meta->{private}; + return unless $no_index; + + # cleanup wrong format + if ( ! ref $no_index ) { + my $item = $no_index; + $no_index = { dir => [ $item ], file => [ $item ] }; + } + elsif ( ref $no_index eq 'ARRAY' ) { + my $list = $no_index; + $no_index = { dir => [ @$list ], file => [ @$list ] }; + } + + # common mistake: files -> file + if ( exists $no_index->{files} ) { + $no_index->{file} = delete $no_index->{file}; + } + # common mistake: modules -> module + if ( exists $no_index->{modules} ) { + $no_index->{module} = delete $no_index->{module}; + } + return _convert($no_index, $no_index_spec_1_2); + } + + sub _no_index_directory { + my ($element, $key, $meta, $version) = @_; + return unless $element; + + # cleanup wrong format + if ( ! ref $element ) { + my $item = $element; + $element = { directory => [ $item ], file => [ $item ] }; + } + elsif ( ref $element eq 'ARRAY' ) { + my $list = $element; + $element = { directory => [ @$list ], file => [ @$list ] }; + } + + if ( exists $element->{dir} ) { + $element->{directory} = delete $element->{dir}; + } + # common mistake: files -> file + if ( exists $element->{files} ) { + $element->{file} = delete $element->{file}; + } + # common mistake: modules -> module + if ( exists $element->{modules} ) { + $element->{module} = delete $element->{module}; + } + my $spec = $version == 2 ? $no_index_spec_2 : $no_index_spec_1_3; + return _convert($element, $spec); + } + + sub _is_module_name { + my $mod = shift; + return unless defined $mod && length $mod; + return $mod =~ m{^[A-Za-z][A-Za-z0-9_]*(?:::[A-Za-z0-9_]+)*$}; + } + + sub _clean_version { + my ($element, $key, $meta, $to_version) = @_; + return 0 if ! defined $element; + + $element =~ s{^\s*}{}; + $element =~ s{\s*$}{}; + $element =~ s{^\.}{0.}; + + return 0 if ! length $element; + return 0 if ( $element eq 'undef' || $element eq '<undef>' ); + + if ( my $v = eval { version->new($element) } ) { + return $v->is_qv ? $v->normal : $element; + } + else { + return 0; + } + } + + sub _version_map { + my ($element) = @_; + return undef unless defined $element; + if ( ref $element eq 'HASH' ) { + my $new_map = {}; + for my $k ( keys %$element ) { + next unless _is_module_name($k); + my $value = $element->{$k}; + if ( ! ( defined $value && length $value ) ) { + $new_map->{$k} = 0; + } + elsif ( $value eq 'undef' || $value eq '<undef>' ) { + $new_map->{$k} = 0; + } + elsif ( _is_module_name( $value ) ) { # some weird, old META have this + $new_map->{$k} = 0; + $new_map->{$value} = 0; + } + else { + $new_map->{$k} = _clean_version($value); + } + } + return $new_map; + } + elsif ( ref $element eq 'ARRAY' ) { + my $hashref = { map { $_ => 0 } @$element }; + return _version_map($hashref); # cleanup any weird stuff + } + elsif ( ref $element eq '' && length $element ) { + return { $element => 0 } + } + return; + } + + sub _prereqs_from_1 { + my (undef, undef, $meta) = @_; + my $prereqs = {}; + for my $phase ( qw/build configure/ ) { + my $key = "${phase}_requires"; + $prereqs->{$phase}{requires} = _version_map($meta->{$key}) + if $meta->{$key}; + } + for my $rel ( qw/requires recommends conflicts/ ) { + $prereqs->{runtime}{$rel} = _version_map($meta->{$rel}) + if $meta->{$rel}; + } + return $prereqs; + } + + my $prereqs_spec = { + configure => \&_prereqs_rel, + build => \&_prereqs_rel, + test => \&_prereqs_rel, + runtime => \&_prereqs_rel, + develop => \&_prereqs_rel, + ':custom' => \&_prefix_custom, + }; + + my $relation_spec = { + requires => \&_version_map, + recommends => \&_version_map, + suggests => \&_version_map, + conflicts => \&_version_map, + ':custom' => \&_prefix_custom, + }; + + sub _cleanup_prereqs { + my ($prereqs, $key, $meta, $to_version) = @_; + return unless $prereqs && ref $prereqs eq 'HASH'; + return _convert( $prereqs, $prereqs_spec, $to_version ); + } + + sub _prereqs_rel { + my ($relation, $key, $meta, $to_version) = @_; + return unless $relation && ref $relation eq 'HASH'; + return _convert( $relation, $relation_spec, $to_version ); + } + + + BEGIN { + my @old_prereqs = qw( + requires + configure_requires + recommends + conflicts + ); + + for ( @old_prereqs ) { + my $sub = "_get_$_"; + my ($phase,$type) = split qr/_/, $_; + if ( ! defined $type ) { + $type = $phase; + $phase = 'runtime'; + } + no strict 'refs'; + *{$sub} = sub { _extract_prereqs($_[2]->{prereqs},$phase,$type) }; + } + } + + sub _get_build_requires { + my ($data, $key, $meta) = @_; + + my $test_h = _extract_prereqs($_[2]->{prereqs}, qw(test requires)) || {}; + my $build_h = _extract_prereqs($_[2]->{prereqs}, qw(build requires)) || {}; + + require Version::Requirements; + my $test_req = Version::Requirements->from_string_hash($test_h); + my $build_req = Version::Requirements->from_string_hash($build_h); + + $test_req->add_requirements($build_req)->as_string_hash; + } + + sub _extract_prereqs { + my ($prereqs, $phase, $type) = @_; + return unless ref $prereqs eq 'HASH'; + return $prereqs->{$phase}{$type}; + } + + sub _downgrade_optional_features { + my (undef, undef, $meta) = @_; + return undef unless exists $meta->{optional_features}; + my $origin = $meta->{optional_features}; + my $features = {}; + for my $name ( keys %$origin ) { + $features->{$name} = { + description => $origin->{$name}{description}, + requires => _extract_prereqs($origin->{$name}{prereqs},'runtime','requires'), + configure_requires => _extract_prereqs($origin->{$name}{prereqs},'runtime','configure_requires'), + build_requires => _extract_prereqs($origin->{$name}{prereqs},'runtime','build_requires'), + recommends => _extract_prereqs($origin->{$name}{prereqs},'runtime','recommends'), + conflicts => _extract_prereqs($origin->{$name}{prereqs},'runtime','conflicts'), + }; + for my $k (keys %{$features->{$name}} ) { + delete $features->{$name}{$k} unless defined $features->{$name}{$k}; + } + } + return $features; + } + + sub _upgrade_optional_features { + my (undef, undef, $meta) = @_; + return undef unless exists $meta->{optional_features}; + my $origin = $meta->{optional_features}; + my $features = {}; + for my $name ( keys %$origin ) { + $features->{$name} = { + description => $origin->{$name}{description}, + prereqs => _prereqs_from_1(undef, undef, $origin->{$name}), + }; + delete $features->{$name}{prereqs}{configure}; + } + return $features; + } + + my $optional_features_2_spec = { + description => \&_keep, + prereqs => \&_cleanup_prereqs, + ':custom' => \&_prefix_custom, + }; + + sub _feature_2 { + my ($element, $key, $meta, $to_version) = @_; + return unless $element && ref $element eq 'HASH'; + _convert( $element, $optional_features_2_spec, $to_version ); + } + + sub _cleanup_optional_features_2 { + my ($element, $key, $meta, $to_version) = @_; + return unless $element && ref $element eq 'HASH'; + my $new_data = {}; + for my $k ( keys %$element ) { + $new_data->{$k} = _feature_2( $element->{$k}, $k, $meta, $to_version ); + } + return unless keys %$new_data; + return $new_data; + } + + sub _optional_features_1_4 { + my ($element) = @_; + return unless $element; + $element = _optional_features_as_map($element); + for my $name ( keys %$element ) { + for my $drop ( qw/requires_packages requires_os excluded_os/ ) { + delete $element->{$name}{$drop}; + } + } + return $element; + } + + sub _optional_features_as_map { + my ($element) = @_; + return unless $element; + if ( ref $element eq 'ARRAY' ) { + my %map; + for my $feature ( @$element ) { + my (@parts) = %$feature; + $map{$parts[0]} = $parts[1]; + } + $element = \%map; + } + return $element; + } + + sub _is_urlish { defined $_[0] && $_[0] =~ m{\A[-+.a-z0-9]+:.+}i } + + sub _url_or_drop { + my ($element) = @_; + return $element if _is_urlish($element); + return; + } + + sub _url_list { + my ($element) = @_; + return unless $element; + $element = _listify( $element ); + $element = [ grep { _is_urlish($_) } @$element ]; + return unless @$element; + return $element; + } + + sub _author_list { + my ($element) = @_; + return [ 'unknown' ] unless $element; + $element = _listify( $element ); + $element = [ map { defined $_ && length $_ ? $_ : 'unknown' } @$element ]; + return [ 'unknown' ] unless @$element; + return $element; + } + + my $resource2_upgrade = { + license => sub { return _is_urlish($_[0]) ? _listify( $_[0] ) : undef }, + homepage => \&_url_or_drop, + bugtracker => sub { + my ($item) = @_; + return unless $item; + if ( $item =~ m{^mailto:(.*)$} ) { return { mailto => $1 } } + elsif( _is_urlish($item) ) { return { web => $item } } + else { return undef } + }, + repository => sub { return _is_urlish($_[0]) ? { url => $_[0] } : undef }, + ':custom' => \&_prefix_custom, + }; + + sub _upgrade_resources_2 { + my (undef, undef, $meta, $version) = @_; + return undef unless exists $meta->{resources}; + return _convert($meta->{resources}, $resource2_upgrade); + } + + my $bugtracker2_spec = { + web => \&_url_or_drop, + mailto => \&_keep, + ':custom' => \&_prefix_custom, + }; + + sub _repo_type { + my ($element, $key, $meta, $to_version) = @_; + return $element if defined $element; + return unless exists $meta->{url}; + my $repo_url = $meta->{url}; + for my $type ( qw/git svn/ ) { + return $type if $repo_url =~ m{\A$type}; + } + return; + } + + my $repository2_spec = { + web => \&_url_or_drop, + url => \&_url_or_drop, + type => \&_repo_type, + ':custom' => \&_prefix_custom, + }; + + my $resources2_cleanup = { + license => \&_url_list, + homepage => \&_url_or_drop, + bugtracker => sub { ref $_[0] ? _convert( $_[0], $bugtracker2_spec ) : undef }, + repository => sub { my $data = shift; ref $data ? _convert( $data, $repository2_spec ) : undef }, + ':custom' => \&_prefix_custom, + }; + + sub _cleanup_resources_2 { + my ($resources, $key, $meta, $to_version) = @_; + return undef unless $resources && ref $resources eq 'HASH'; + return _convert($resources, $resources2_cleanup, $to_version); + } + + my $resource1_spec = { + license => \&_url_or_drop, + homepage => \&_url_or_drop, + bugtracker => \&_url_or_drop, + repository => \&_url_or_drop, + ':custom' => \&_keep, + }; + + sub _resources_1_3 { + my (undef, undef, $meta, $version) = @_; + return undef unless exists $meta->{resources}; + return _convert($meta->{resources}, $resource1_spec); + } + + *_resources_1_4 = *_resources_1_3; + + sub _resources_1_2 { + my (undef, undef, $meta) = @_; + my $resources = $meta->{resources} || {}; + if ( $meta->{license_url} && ! $resources->{license} ) { + $resources->{license} = $meta->license_url + if _is_urlish($meta->{license_url}); + } + return undef unless keys %$resources; + return _convert($resources, $resource1_spec); + } + + my $resource_downgrade_spec = { + license => sub { return ref $_[0] ? $_[0]->[0] : $_[0] }, + homepage => \&_url_or_drop, + bugtracker => sub { return $_[0]->{web} }, + repository => sub { return $_[0]->{url} || $_[0]->{web} }, + ':custom' => \&_ucfirst_custom, + }; + + sub _downgrade_resources { + my (undef, undef, $meta, $version) = @_; + return undef unless exists $meta->{resources}; + return _convert($meta->{resources}, $resource_downgrade_spec); + } + + sub _release_status { + my ($element, undef, $meta) = @_; + return $element if $element && $element =~ m{\A(?:stable|testing|unstable)\z}; + return _release_status_from_version(undef, undef, $meta); + } + + sub _release_status_from_version { + my (undef, undef, $meta) = @_; + my $version = $meta->{version} || ''; + return ( $version =~ /_/ ) ? 'testing' : 'stable'; + } + + my $provides_spec = { + file => \&_keep, + version => \&_clean_version, + }; + + my $provides_spec_2 = { + file => \&_keep, + version => \&_clean_version, + ':custom' => \&_prefix_custom, + }; + + sub _provides { + my ($element, $key, $meta, $to_version) = @_; + return unless defined $element && ref $element eq 'HASH'; + my $spec = $to_version == 2 ? $provides_spec_2 : $provides_spec; + my $new_data = {}; + for my $k ( keys %$element ) { + $new_data->{$k} = _convert($element->{$k}, $spec, $to_version); + } + return $new_data; + } + + sub _convert { + my ($data, $spec, $to_version) = @_; + + my $new_data = {}; + for my $key ( keys %$spec ) { + next if $key eq ':custom' || $key eq ':drop'; + next unless my $fcn = $spec->{$key}; + die "spec for '$key' is not a coderef" + unless ref $fcn && ref $fcn eq 'CODE'; + my $new_value = $fcn->($data->{$key}, $key, $data, $to_version); + $new_data->{$key} = $new_value if defined $new_value; + } + + my $drop_list = $spec->{':drop'}; + my $customizer = $spec->{':custom'} || \&_keep; + + for my $key ( keys %$data ) { + next if $drop_list && grep { $key eq $_ } @$drop_list; + next if exists $spec->{$key}; # we handled it + $new_data->{ $customizer->($key) } = $data->{$key}; + } + + return $new_data; + } + + #--------------------------------------------------------------------------# + # define converters for each conversion + #--------------------------------------------------------------------------# + + # each converts from prior version + # special ":custom" field is used for keys not recognized in spec + my %up_convert = ( + '2-from-1.4' => { + # PRIOR MANDATORY + 'abstract' => \&_keep_or_unknown, + 'author' => \&_author_list, + 'generated_by' => \&_generated_by, + 'license' => \&_license_2, + 'meta-spec' => \&_change_meta_spec, + 'name' => \&_keep, + 'version' => \&_keep, + # CHANGED TO MANDATORY + 'dynamic_config' => \&_keep_or_one, + # ADDED MANDATORY + 'release_status' => \&_release_status_from_version, + # PRIOR OPTIONAL + 'keywords' => \&_keep, + 'no_index' => \&_no_index_directory, + 'optional_features' => \&_upgrade_optional_features, + 'provides' => \&_provides, + 'resources' => \&_upgrade_resources_2, + # ADDED OPTIONAL + 'description' => \&_keep, + 'prereqs' => \&_prereqs_from_1, + + # drop these deprecated fields, but only after we convert + ':drop' => [ qw( + build_requires + configure_requires + conflicts + distribution_type + license_url + private + recommends + requires + ) ], + + # other random keys need x_ prefixing + ':custom' => \&_prefix_custom, + }, + '1.4-from-1.3' => { + # PRIOR MANDATORY + 'abstract' => \&_keep_or_unknown, + 'author' => \&_author_list, + 'generated_by' => \&_generated_by, + 'license' => \&_license_1, + 'meta-spec' => \&_change_meta_spec, + 'name' => \&_keep, + 'version' => \&_keep, + # PRIOR OPTIONAL + 'build_requires' => \&_version_map, + 'conflicts' => \&_version_map, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'keywords' => \&_keep, + 'no_index' => \&_no_index_directory, + 'optional_features' => \&_optional_features_1_4, + 'provides' => \&_provides, + 'recommends' => \&_version_map, + 'requires' => \&_version_map, + 'resources' => \&_resources_1_4, + # ADDED OPTIONAL + 'configure_requires' => \&_keep, + + # drop these deprecated fields, but only after we convert + ':drop' => [ qw( + license_url + private + )], + + # other random keys are OK if already valid + ':custom' => \&_keep + }, + '1.3-from-1.2' => { + # PRIOR MANDATORY + 'abstract' => \&_keep_or_unknown, + 'author' => \&_author_list, + 'generated_by' => \&_generated_by, + 'license' => \&_license_1, + 'meta-spec' => \&_change_meta_spec, + 'name' => \&_keep, + 'version' => \&_keep, + # PRIOR OPTIONAL + 'build_requires' => \&_version_map, + 'conflicts' => \&_version_map, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'keywords' => \&_keep, + 'no_index' => \&_no_index_directory, + 'optional_features' => \&_optional_features_as_map, + 'provides' => \&_provides, + 'recommends' => \&_version_map, + 'requires' => \&_version_map, + 'resources' => \&_resources_1_3, + + # drop these deprecated fields, but only after we convert + ':drop' => [ qw( + license_url + private + )], + + # other random keys are OK if already valid + ':custom' => \&_keep + }, + '1.2-from-1.1' => { + # PRIOR MANDATORY + 'version' => \&_keep, + # CHANGED TO MANDATORY + 'license' => \&_license_1, + 'name' => \&_keep, + 'generated_by' => \&_generated_by, + # ADDED MANDATORY + 'abstract' => \&_keep_or_unknown, + 'author' => \&_author_list, + 'meta-spec' => \&_change_meta_spec, + # PRIOR OPTIONAL + 'build_requires' => \&_version_map, + 'conflicts' => \&_version_map, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'recommends' => \&_version_map, + 'requires' => \&_version_map, + # ADDED OPTIONAL + 'keywords' => \&_keep, + 'no_index' => \&_no_index_1_2, + 'optional_features' => \&_optional_features_as_map, + 'provides' => \&_provides, + 'resources' => \&_resources_1_2, + + # drop these deprecated fields, but only after we convert + ':drop' => [ qw( + license_url + private + )], + + # other random keys are OK if already valid + ':custom' => \&_keep + }, + '1.1-from-1.0' => { + # CHANGED TO MANDATORY + 'version' => \&_keep, + # IMPLIED MANDATORY + 'name' => \&_keep, + # PRIOR OPTIONAL + 'build_requires' => \&_version_map, + 'conflicts' => \&_version_map, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'generated_by' => \&_generated_by, + 'license' => \&_license_1, + 'recommends' => \&_version_map, + 'requires' => \&_version_map, + # ADDED OPTIONAL + 'license_url' => \&_url_or_drop, + 'private' => \&_keep, + + # other random keys are OK if already valid + ':custom' => \&_keep + }, + ); + + my %down_convert = ( + '1.4-from-2' => { + # MANDATORY + 'abstract' => \&_keep_or_unknown, + 'author' => \&_author_list, + 'generated_by' => \&_generated_by, + 'license' => \&_downgrade_license, + 'meta-spec' => \&_change_meta_spec, + 'name' => \&_keep, + 'version' => \&_keep, + # OPTIONAL + 'build_requires' => \&_get_build_requires, + 'configure_requires' => \&_get_configure_requires, + 'conflicts' => \&_get_conflicts, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'keywords' => \&_keep, + 'no_index' => \&_no_index_directory, + 'optional_features' => \&_downgrade_optional_features, + 'provides' => \&_provides, + 'recommends' => \&_get_recommends, + 'requires' => \&_get_requires, + 'resources' => \&_downgrade_resources, + + # drop these unsupported fields (after conversion) + ':drop' => [ qw( + description + prereqs + release_status + )], + + # custom keys will be left unchanged + ':custom' => \&_keep + }, + '1.3-from-1.4' => { + # MANDATORY + 'abstract' => \&_keep_or_unknown, + 'author' => \&_author_list, + 'generated_by' => \&_generated_by, + 'license' => \&_license_1, + 'meta-spec' => \&_change_meta_spec, + 'name' => \&_keep, + 'version' => \&_keep, + # OPTIONAL + 'build_requires' => \&_version_map, + 'conflicts' => \&_version_map, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'keywords' => \&_keep, + 'no_index' => \&_no_index_directory, + 'optional_features' => \&_optional_features_as_map, + 'provides' => \&_provides, + 'recommends' => \&_version_map, + 'requires' => \&_version_map, + 'resources' => \&_resources_1_3, + + # drop these unsupported fields, but only after we convert + ':drop' => [ qw( + configure_requires + )], + + # other random keys are OK if already valid + ':custom' => \&_keep, + }, + '1.2-from-1.3' => { + # MANDATORY + 'abstract' => \&_keep_or_unknown, + 'author' => \&_author_list, + 'generated_by' => \&_generated_by, + 'license' => \&_license_1, + 'meta-spec' => \&_change_meta_spec, + 'name' => \&_keep, + 'version' => \&_keep, + # OPTIONAL + 'build_requires' => \&_version_map, + 'conflicts' => \&_version_map, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'keywords' => \&_keep, + 'no_index' => \&_no_index_1_2, + 'optional_features' => \&_optional_features_as_map, + 'provides' => \&_provides, + 'recommends' => \&_version_map, + 'requires' => \&_version_map, + 'resources' => \&_resources_1_3, + + # other random keys are OK if already valid + ':custom' => \&_keep, + }, + '1.1-from-1.2' => { + # MANDATORY + 'version' => \&_keep, + # IMPLIED MANDATORY + 'name' => \&_keep, + 'meta-spec' => \&_change_meta_spec, + # OPTIONAL + 'build_requires' => \&_version_map, + 'conflicts' => \&_version_map, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'generated_by' => \&_generated_by, + 'license' => \&_license_1, + 'private' => \&_keep, + 'recommends' => \&_version_map, + 'requires' => \&_version_map, + + # drop unsupported fields + ':drop' => [ qw( + abstract + author + provides + no_index + keywords + resources + )], + + # other random keys are OK if already valid + ':custom' => \&_keep, + }, + '1.0-from-1.1' => { + # IMPLIED MANDATORY + 'name' => \&_keep, + 'meta-spec' => \&_change_meta_spec, + 'version' => \&_keep, + # PRIOR OPTIONAL + 'build_requires' => \&_version_map, + 'conflicts' => \&_version_map, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'generated_by' => \&_generated_by, + 'license' => \&_license_1, + 'recommends' => \&_version_map, + 'requires' => \&_version_map, + + # other random keys are OK if already valid + ':custom' => \&_keep, + }, + ); + + my %cleanup = ( + '2' => { + # PRIOR MANDATORY + 'abstract' => \&_keep_or_unknown, + 'author' => \&_author_list, + 'generated_by' => \&_generated_by, + 'license' => \&_license_2, + 'meta-spec' => \&_change_meta_spec, + 'name' => \&_keep, + 'version' => \&_keep, + # CHANGED TO MANDATORY + 'dynamic_config' => \&_keep_or_one, + # ADDED MANDATORY + 'release_status' => \&_release_status, + # PRIOR OPTIONAL + 'keywords' => \&_keep, + 'no_index' => \&_no_index_directory, + 'optional_features' => \&_cleanup_optional_features_2, + 'provides' => \&_provides, + 'resources' => \&_cleanup_resources_2, + # ADDED OPTIONAL + 'description' => \&_keep, + 'prereqs' => \&_cleanup_prereqs, + + # drop these deprecated fields, but only after we convert + ':drop' => [ qw( + build_requires + configure_requires + conflicts + distribution_type + license_url + private + recommends + requires + ) ], + + # other random keys need x_ prefixing + ':custom' => \&_prefix_custom, + }, + '1.4' => { + # PRIOR MANDATORY + 'abstract' => \&_keep_or_unknown, + 'author' => \&_author_list, + 'generated_by' => \&_generated_by, + 'license' => \&_license_1, + 'meta-spec' => \&_change_meta_spec, + 'name' => \&_keep, + 'version' => \&_keep, + # PRIOR OPTIONAL + 'build_requires' => \&_version_map, + 'conflicts' => \&_version_map, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'keywords' => \&_keep, + 'no_index' => \&_no_index_directory, + 'optional_features' => \&_optional_features_1_4, + 'provides' => \&_provides, + 'recommends' => \&_version_map, + 'requires' => \&_version_map, + 'resources' => \&_resources_1_4, + # ADDED OPTIONAL + 'configure_requires' => \&_keep, + + # other random keys are OK if already valid + ':custom' => \&_keep + }, + '1.3' => { + # PRIOR MANDATORY + 'abstract' => \&_keep_or_unknown, + 'author' => \&_author_list, + 'generated_by' => \&_generated_by, + 'license' => \&_license_1, + 'meta-spec' => \&_change_meta_spec, + 'name' => \&_keep, + 'version' => \&_keep, + # PRIOR OPTIONAL + 'build_requires' => \&_version_map, + 'conflicts' => \&_version_map, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'keywords' => \&_keep, + 'no_index' => \&_no_index_directory, + 'optional_features' => \&_optional_features_as_map, + 'provides' => \&_provides, + 'recommends' => \&_version_map, + 'requires' => \&_version_map, + 'resources' => \&_resources_1_3, + + # other random keys are OK if already valid + ':custom' => \&_keep + }, + '1.2' => { + # PRIOR MANDATORY + 'version' => \&_keep, + # CHANGED TO MANDATORY + 'license' => \&_license_1, + 'name' => \&_keep, + 'generated_by' => \&_generated_by, + # ADDED MANDATORY + 'abstract' => \&_keep_or_unknown, + 'author' => \&_author_list, + 'meta-spec' => \&_change_meta_spec, + # PRIOR OPTIONAL + 'build_requires' => \&_version_map, + 'conflicts' => \&_version_map, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'recommends' => \&_version_map, + 'requires' => \&_version_map, + # ADDED OPTIONAL + 'keywords' => \&_keep, + 'no_index' => \&_no_index_1_2, + 'optional_features' => \&_optional_features_as_map, + 'provides' => \&_provides, + 'resources' => \&_resources_1_2, + + # other random keys are OK if already valid + ':custom' => \&_keep + }, + '1.1' => { + # CHANGED TO MANDATORY + 'version' => \&_keep, + # IMPLIED MANDATORY + 'name' => \&_keep, + 'meta-spec' => \&_change_meta_spec, + # PRIOR OPTIONAL + 'build_requires' => \&_version_map, + 'conflicts' => \&_version_map, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'generated_by' => \&_generated_by, + 'license' => \&_license_1, + 'recommends' => \&_version_map, + 'requires' => \&_version_map, + # ADDED OPTIONAL + 'license_url' => \&_url_or_drop, + 'private' => \&_keep, + + # other random keys are OK if already valid + ':custom' => \&_keep + }, + '1.0' => { + # IMPLIED MANDATORY + 'name' => \&_keep, + 'meta-spec' => \&_change_meta_spec, + 'version' => \&_keep, + # IMPLIED OPTIONAL + 'build_requires' => \&_version_map, + 'conflicts' => \&_version_map, + 'distribution_type' => \&_keep, + 'dynamic_config' => \&_keep_or_one, + 'generated_by' => \&_generated_by, + 'license' => \&_license_1, + 'recommends' => \&_version_map, + 'requires' => \&_version_map, + + # other random keys are OK if already valid + ':custom' => \&_keep, + }, + ); + + #--------------------------------------------------------------------------# + # Code + #--------------------------------------------------------------------------# + + + sub new { + my ($class,$data) = @_; + + # create an attributes hash + my $self = { + 'data' => $data, + 'spec' => $data->{'meta-spec'}{'version'} || "1.0", + }; + + # create the object + return bless $self, $class; + } + + + sub convert { + my ($self, %args) = @_; + my $args = { %args }; + + my $new_version = $args->{version} || $HIGHEST; + + my ($old_version) = $self->{spec}; + my $converted = _dclone($self->{data}); + + if ( $old_version == $new_version ) { + $converted = _convert( $converted, $cleanup{$old_version}, $old_version ); + my $cmv = CPAN::Meta::Validator->new( $converted ); + unless ( $cmv->is_valid ) { + my $errs = join("\n", $cmv->errors); + die "Failed to clean-up $old_version metadata. Errors:\n$errs\n"; + } + return $converted; + } + elsif ( $old_version > $new_version ) { + my @vers = sort { $b <=> $a } keys %known_specs; + for my $i ( 0 .. $#vers-1 ) { + next if $vers[$i] > $old_version; + last if $vers[$i+1] < $new_version; + my $spec_string = "$vers[$i+1]-from-$vers[$i]"; + $converted = _convert( $converted, $down_convert{$spec_string}, $vers[$i+1] ); + my $cmv = CPAN::Meta::Validator->new( $converted ); + unless ( $cmv->is_valid ) { + my $errs = join("\n", $cmv->errors); + die "Failed to downconvert metadata to $vers[$i+1]. Errors:\n$errs\n"; + } + } + return $converted; + } + else { + my @vers = sort { $a <=> $b } keys %known_specs; + for my $i ( 0 .. $#vers-1 ) { + next if $vers[$i] < $old_version; + last if $vers[$i+1] > $new_version; + my $spec_string = "$vers[$i+1]-from-$vers[$i]"; + $converted = _convert( $converted, $up_convert{$spec_string}, $vers[$i+1] ); + my $cmv = CPAN::Meta::Validator->new( $converted ); + unless ( $cmv->is_valid ) { + my $errs = join("\n", $cmv->errors); + die "Failed to upconvert metadata to $vers[$i+1]. Errors:\n$errs\n"; + } + } + return $converted; + } + } + + 1; + + + + + __END__ + + +CPAN_META_CONVERTER + +$fatpacked{"CPAN/Meta/Feature.pm"} = <<'CPAN_META_FEATURE'; + use 5.006; + use strict; + use warnings; + package CPAN::Meta::Feature; + BEGIN { + $CPAN::Meta::Feature::VERSION = '2.110930'; + } + # ABSTRACT: an optional feature provided by a CPAN distribution + + use CPAN::Meta::Prereqs; + + + sub new { + my ($class, $identifier, $spec) = @_; + + my %guts = ( + identifier => $identifier, + description => $spec->{description}, + prereqs => CPAN::Meta::Prereqs->new($spec->{prereqs}), + ); + + bless \%guts => $class; + } + + + sub identifier { $_[0]{identifier} } + + + sub description { $_[0]{description} } + + + sub prereqs { $_[0]{prereqs} } + + 1; + + + + + __END__ + + + +CPAN_META_FEATURE + +$fatpacked{"CPAN/Meta/History.pm"} = <<'CPAN_META_HISTORY'; + # vi:tw=72 + use 5.006; + use strict; + use warnings; + package CPAN::Meta::History; + BEGIN { + $CPAN::Meta::History::VERSION = '2.110930'; + } + # ABSTRACT: history of CPAN Meta Spec changes + 1; + + + + __END__ + =pod + +CPAN_META_HISTORY + +$fatpacked{"CPAN/Meta/Prereqs.pm"} = <<'CPAN_META_PREREQS'; + use 5.006; + use strict; + use warnings; + package CPAN::Meta::Prereqs; + BEGIN { + $CPAN::Meta::Prereqs::VERSION = '2.110930'; + } + # ABSTRACT: a set of distribution prerequisites by phase and type + + + use Carp qw(confess); + use Scalar::Util qw(blessed); + use Version::Requirements 0.101020; # finalize + + + sub __legal_phases { qw(configure build test runtime develop) } + sub __legal_types { qw(requires recommends suggests conflicts) } + + # expect a prereq spec from META.json -- rjbs, 2010-04-11 + sub new { + my ($class, $prereq_spec) = @_; + $prereq_spec ||= {}; + + my %is_legal_phase = map {; $_ => 1 } $class->__legal_phases; + my %is_legal_type = map {; $_ => 1 } $class->__legal_types; + + my %guts; + PHASE: for my $phase (keys %$prereq_spec) { + next PHASE unless $phase =~ /\Ax_/i or $is_legal_phase{$phase}; + + my $phase_spec = $prereq_spec->{ $phase }; + next PHASE unless keys %$phase_spec; + + TYPE: for my $type (keys %$phase_spec) { + next TYPE unless $type =~ /\Ax_/i or $is_legal_type{$type}; + + my $spec = $phase_spec->{ $type }; + + next TYPE unless keys %$spec; + + $guts{prereqs}{$phase}{$type} = Version::Requirements->from_string_hash( + $spec + ); + } + } + + return bless \%guts => $class; + } + + + sub requirements_for { + my ($self, $phase, $type) = @_; + + confess "requirements_for called without phase" unless defined $phase; + confess "requirements_for called without type" unless defined $type; + + unless ($phase =~ /\Ax_/i or grep { $phase eq $_ } $self->__legal_phases) { + confess "requested requirements for unknown phase: $phase"; + } + + unless ($type =~ /\Ax_/i or grep { $type eq $_ } $self->__legal_types) { + confess "requested requirements for unknown type: $type"; + } + + my $req = ($self->{prereqs}{$phase}{$type} ||= Version::Requirements->new); + + $req->finalize if $self->is_finalized; + + return $req; + } + + + sub with_merged_prereqs { + my ($self, $other) = @_; + + my @other = blessed($other) ? $other : @$other; + + my @prereq_objs = ($self, @other); + + my %new_arg; + + for my $phase ($self->__legal_phases) { + for my $type ($self->__legal_types) { + my $req = Version::Requirements->new; + + for my $prereq (@prereq_objs) { + my $this_req = $prereq->requirements_for($phase, $type); + next unless $this_req->required_modules; + + $req->add_requirements($this_req); + } + + next unless $req->required_modules; + + $new_arg{ $phase }{ $type } = $req->as_string_hash; + } + } + + return (ref $self)->new(\%new_arg); + } + + + sub as_string_hash { + my ($self) = @_; + + my %hash; + + for my $phase ($self->__legal_phases) { + for my $type ($self->__legal_types) { + my $req = $self->requirements_for($phase, $type); + next unless $req->required_modules; + + $hash{ $phase }{ $type } = $req->as_string_hash; + } + } + + return \%hash; + } + + + sub is_finalized { $_[0]{finalized} } + + + sub finalize { + my ($self) = @_; + + $self->{finalized} = 1; + + for my $phase (keys %{ $self->{prereqs} }) { + $_->finalize for values %{ $self->{prereqs}{$phase} }; + } + } + + + sub clone { + my ($self) = @_; + + my $clone = (ref $self)->new( $self->as_string_hash ); + } + + 1; + + + + + __END__ + + + +CPAN_META_PREREQS + +$fatpacked{"CPAN/Meta/Spec.pm"} = <<'CPAN_META_SPEC'; + # vi:tw=72 + use 5.006; + use strict; + use warnings; + package CPAN::Meta::Spec; + BEGIN { + $CPAN::Meta::Spec::VERSION = '2.110930'; + } + # ABSTRACT: specification for CPAN distribution metadata + 1; + + + + __END__ + =pod + +CPAN_META_SPEC + +$fatpacked{"CPAN/Meta/Validator.pm"} = <<'CPAN_META_VALIDATOR'; + use 5.006; + use strict; + use warnings; + package CPAN::Meta::Validator; + BEGIN { + $CPAN::Meta::Validator::VERSION = '2.110930'; + } + # ABSTRACT: validate CPAN distribution metadata structures + + + #--------------------------------------------------------------------------# + # This code copied and adapted from Test::CPAN::Meta + # by Barbie, <barbie@cpan.org> for Miss Barbell Productions, + # L<http://www.missbarbell.co.uk> + #--------------------------------------------------------------------------# + + #--------------------------------------------------------------------------# + # Specification Definitions + #--------------------------------------------------------------------------# + + my %known_specs = ( + '1.4' => 'http://module-build.sourceforge.net/META-spec-v1.4.html', + '1.3' => 'http://module-build.sourceforge.net/META-spec-v1.3.html', + '1.2' => 'http://module-build.sourceforge.net/META-spec-v1.2.html', + '1.1' => 'http://module-build.sourceforge.net/META-spec-v1.1.html', + '1.0' => 'http://module-build.sourceforge.net/META-spec-v1.0.html' + ); + my %known_urls = map {$known_specs{$_} => $_} keys %known_specs; + + my $module_map1 = { 'map' => { ':key' => { name => \&module, value => \&exversion } } }; + + my $module_map2 = { 'map' => { ':key' => { name => \&module, value => \&version } } }; + + my $no_index_2 = { + 'map' => { file => { list => { value => \&string } }, + directory => { list => { value => \&string } }, + 'package' => { list => { value => \&string } }, + namespace => { list => { value => \&string } }, + ':key' => { name => \&custom_2, value => \&anything }, + } + }; + + my $no_index_1_3 = { + 'map' => { file => { list => { value => \&string } }, + directory => { list => { value => \&string } }, + 'package' => { list => { value => \&string } }, + namespace => { list => { value => \&string } }, + ':key' => { name => \&string, value => \&anything }, + } + }; + + my $no_index_1_2 = { + 'map' => { file => { list => { value => \&string } }, + dir => { list => { value => \&string } }, + 'package' => { list => { value => \&string } }, + namespace => { list => { value => \&string } }, + ':key' => { name => \&string, value => \&anything }, + } + }; + + my $no_index_1_1 = { + 'map' => { ':key' => { name => \&string, list => { value => \&string } }, + } + }; + + my $prereq_map = { + map => { + ':key' => { + name => \&phase, + 'map' => { + ':key' => { + name => \&relation, + %$module_map1, + }, + }, + } + }, + }; + + my %definitions = ( + '2' => { + # REQUIRED + 'abstract' => { mandatory => 1, value => \&string }, + 'author' => { mandatory => 1, lazylist => { value => \&string } }, + 'dynamic_config' => { mandatory => 1, value => \&boolean }, + 'generated_by' => { mandatory => 1, value => \&string }, + 'license' => { mandatory => 1, lazylist => { value => \&license } }, + 'meta-spec' => { + mandatory => 1, + 'map' => { + version => { mandatory => 1, value => \&version}, + url => { value => \&url }, + ':key' => { name => \&custom_2, value => \&anything }, + } + }, + 'name' => { mandatory => 1, value => \&string }, + 'release_status' => { mandatory => 1, value => \&release_status }, + 'version' => { mandatory => 1, value => \&version }, + + # OPTIONAL + 'description' => { value => \&string }, + 'keywords' => { lazylist => { value => \&string } }, + 'no_index' => $no_index_2, + 'optional_features' => { + 'map' => { + ':key' => { + name => \&string, + 'map' => { + description => { value => \&string }, + prereqs => $prereq_map, + ':key' => { name => \&custom_2, value => \&anything }, + } + } + } + }, + 'prereqs' => $prereq_map, + 'provides' => { + 'map' => { + ':key' => { + name => \&module, + 'map' => { + file => { mandatory => 1, value => \&file }, + version => { value => \&version }, + ':key' => { name => \&custom_2, value => \&anything }, + } + } + } + }, + 'resources' => { + 'map' => { + license => { lazylist => { value => \&url } }, + homepage => { value => \&url }, + bugtracker => { + 'map' => { + web => { value => \&url }, + mailto => { value => \&string}, + ':key' => { name => \&custom_2, value => \&anything }, + } + }, + repository => { + 'map' => { + web => { value => \&url }, + url => { value => \&url }, + type => { value => \&string }, + ':key' => { name => \&custom_2, value => \&anything }, + } + }, + ':key' => { value => \&string, name => \&custom_2 }, + } + }, + + # CUSTOM -- additional user defined key/value pairs + # note we can only validate the key name, as the structure is user defined + ':key' => { name => \&custom_2, value => \&anything }, + }, + + '1.4' => { + 'meta-spec' => { + mandatory => 1, + 'map' => { + version => { mandatory => 1, value => \&version}, + url => { mandatory => 1, value => \&urlspec }, + ':key' => { name => \&string, value => \&anything }, + }, + }, + + 'name' => { mandatory => 1, value => \&string }, + 'version' => { mandatory => 1, value => \&version }, + 'abstract' => { mandatory => 1, value => \&string }, + 'author' => { mandatory => 1, list => { value => \&string } }, + 'license' => { mandatory => 1, value => \&license }, + 'generated_by' => { mandatory => 1, value => \&string }, + + 'distribution_type' => { value => \&string }, + 'dynamic_config' => { value => \&boolean }, + + 'requires' => $module_map1, + 'recommends' => $module_map1, + 'build_requires' => $module_map1, + 'configure_requires' => $module_map1, + 'conflicts' => $module_map2, + + 'optional_features' => { + 'map' => { + ':key' => { name => \&string, + 'map' => { description => { value => \&string }, + requires => $module_map1, + recommends => $module_map1, + build_requires => $module_map1, + conflicts => $module_map2, + ':key' => { name => \&string, value => \&anything }, + } + } + } + }, + + 'provides' => { + 'map' => { + ':key' => { name => \&module, + 'map' => { + file => { mandatory => 1, value => \&file }, + version => { value => \&version }, + ':key' => { name => \&string, value => \&anything }, + } + } + } + }, + + 'no_index' => $no_index_1_3, + 'private' => $no_index_1_3, + + 'keywords' => { list => { value => \&string } }, + + 'resources' => { + 'map' => { license => { value => \&url }, + homepage => { value => \&url }, + bugtracker => { value => \&url }, + repository => { value => \&url }, + ':key' => { value => \&string, name => \&custom_1 }, + } + }, + + # additional user defined key/value pairs + # note we can only validate the key name, as the structure is user defined + ':key' => { name => \&string, value => \&anything }, + }, + + '1.3' => { + 'meta-spec' => { + mandatory => 1, + 'map' => { + version => { mandatory => 1, value => \&version}, + url => { mandatory => 1, value => \&urlspec }, + ':key' => { name => \&string, value => \&anything }, + }, + }, + + 'name' => { mandatory => 1, value => \&string }, + 'version' => { mandatory => 1, value => \&version }, + 'abstract' => { mandatory => 1, value => \&string }, + 'author' => { mandatory => 1, list => { value => \&string } }, + 'license' => { mandatory => 1, value => \&license }, + 'generated_by' => { mandatory => 1, value => \&string }, + + 'distribution_type' => { value => \&string }, + 'dynamic_config' => { value => \&boolean }, + + 'requires' => $module_map1, + 'recommends' => $module_map1, + 'build_requires' => $module_map1, + 'conflicts' => $module_map2, + + 'optional_features' => { + 'map' => { + ':key' => { name => \&string, + 'map' => { description => { value => \&string }, + requires => $module_map1, + recommends => $module_map1, + build_requires => $module_map1, + conflicts => $module_map2, + ':key' => { name => \&string, value => \&anything }, + } + } + } + }, + + 'provides' => { + 'map' => { + ':key' => { name => \&module, + 'map' => { + file => { mandatory => 1, value => \&file }, + version => { value => \&version }, + ':key' => { name => \&string, value => \&anything }, + } + } + } + }, + + + 'no_index' => $no_index_1_3, + 'private' => $no_index_1_3, + + 'keywords' => { list => { value => \&string } }, + + 'resources' => { + 'map' => { license => { value => \&url }, + homepage => { value => \&url }, + bugtracker => { value => \&url }, + repository => { value => \&url }, + ':key' => { value => \&string, name => \&custom_1 }, + } + }, + + # additional user defined key/value pairs + # note we can only validate the key name, as the structure is user defined + ':key' => { name => \&string, value => \&anything }, + }, + + # v1.2 is misleading, it seems to assume that a number of fields where created + # within v1.1, when they were created within v1.2. This may have been an + # original mistake, and that a v1.1 was retro fitted into the timeline, when + # v1.2 was originally slated as v1.1. But I could be wrong ;) + '1.2' => { + 'meta-spec' => { + mandatory => 1, + 'map' => { + version => { mandatory => 1, value => \&version}, + url => { mandatory => 1, value => \&urlspec }, + ':key' => { name => \&string, value => \&anything }, + }, + }, + + + 'name' => { mandatory => 1, value => \&string }, + 'version' => { mandatory => 1, value => \&version }, + 'license' => { mandatory => 1, value => \&license }, + 'generated_by' => { mandatory => 1, value => \&string }, + 'author' => { mandatory => 1, list => { value => \&string } }, + 'abstract' => { mandatory => 1, value => \&string }, + + 'distribution_type' => { value => \&string }, + 'dynamic_config' => { value => \&boolean }, + + 'keywords' => { list => { value => \&string } }, + + 'private' => $no_index_1_2, + '$no_index' => $no_index_1_2, + + 'requires' => $module_map1, + 'recommends' => $module_map1, + 'build_requires' => $module_map1, + 'conflicts' => $module_map2, + + 'optional_features' => { + 'map' => { + ':key' => { name => \&string, + 'map' => { description => { value => \&string }, + requires => $module_map1, + recommends => $module_map1, + build_requires => $module_map1, + conflicts => $module_map2, + ':key' => { name => \&string, value => \&anything }, + } + } + } + }, + + 'provides' => { + 'map' => { + ':key' => { name => \&module, + 'map' => { + file => { mandatory => 1, value => \&file }, + version => { value => \&version }, + ':key' => { name => \&string, value => \&anything }, + } + } + } + }, + + 'resources' => { + 'map' => { license => { value => \&url }, + homepage => { value => \&url }, + bugtracker => { value => \&url }, + repository => { value => \&url }, + ':key' => { value => \&string, name => \&custom_1 }, + } + }, + + # additional user defined key/value pairs + # note we can only validate the key name, as the structure is user defined + ':key' => { name => \&string, value => \&anything }, + }, + + # note that the 1.1 spec only specifies 'version' as mandatory + '1.1' => { + 'name' => { value => \&string }, + 'version' => { mandatory => 1, value => \&version }, + 'license' => { value => \&license }, + 'generated_by' => { value => \&string }, + + 'license_uri' => { value => \&url }, + 'distribution_type' => { value => \&string }, + 'dynamic_config' => { value => \&boolean }, + + 'private' => $no_index_1_1, + + 'requires' => $module_map1, + 'recommends' => $module_map1, + 'build_requires' => $module_map1, + 'conflicts' => $module_map2, + + # additional user defined key/value pairs + # note we can only validate the key name, as the structure is user defined + ':key' => { name => \&string, value => \&anything }, + }, + + # note that the 1.0 spec doesn't specify optional or mandatory fields + # but we will treat version as mandatory since otherwise META 1.0 is + # completely arbitrary and pointless + '1.0' => { + 'name' => { value => \&string }, + 'version' => { mandatory => 1, value => \&version }, + 'license' => { value => \&license }, + 'generated_by' => { value => \&string }, + + 'license_uri' => { value => \&url }, + 'distribution_type' => { value => \&string }, + 'dynamic_config' => { value => \&boolean }, + + 'requires' => $module_map1, + 'recommends' => $module_map1, + 'build_requires' => $module_map1, + 'conflicts' => $module_map2, + + # additional user defined key/value pairs + # note we can only validate the key name, as the structure is user defined + ':key' => { name => \&string, value => \&anything }, + }, + ); + + #--------------------------------------------------------------------------# + # Code + #--------------------------------------------------------------------------# + + + sub new { + my ($class,$data) = @_; + + # create an attributes hash + my $self = { + 'data' => $data, + 'spec' => $data->{'meta-spec'}{'version'} || "1.0", + 'errors' => undef, + }; + + # create the object + return bless $self, $class; + } + + + sub is_valid { + my $self = shift; + my $data = $self->{data}; + my $spec_version = $self->{spec}; + $self->check_map($definitions{$spec_version},$data); + return ! $self->errors; + } + + + sub errors { + my $self = shift; + return () unless(defined $self->{errors}); + return @{$self->{errors}}; + } + + + my $spec_error = "Missing validation action in specification. " + . "Must be one of 'map', 'list', 'lazylist', or 'value'"; + + sub check_map { + my ($self,$spec,$data) = @_; + + if(ref($spec) ne 'HASH') { + $self->_error( "Unknown META specification, cannot validate." ); + return; + } + + if(ref($data) ne 'HASH') { + $self->_error( "Expected a map structure from string or file." ); + return; + } + + for my $key (keys %$spec) { + next unless($spec->{$key}->{mandatory}); + next if(defined $data->{$key}); + push @{$self->{stack}}, $key; + $self->_error( "Missing mandatory field, '$key'" ); + pop @{$self->{stack}}; + } + + for my $key (keys %$data) { + push @{$self->{stack}}, $key; + if($spec->{$key}) { + if($spec->{$key}{value}) { + $spec->{$key}{value}->($self,$key,$data->{$key}); + } elsif($spec->{$key}{'map'}) { + $self->check_map($spec->{$key}{'map'},$data->{$key}); + } elsif($spec->{$key}{'list'}) { + $self->check_list($spec->{$key}{'list'},$data->{$key}); + } elsif($spec->{$key}{'lazylist'}) { + $self->check_lazylist($spec->{$key}{'lazylist'},$data->{$key}); + } else { + $self->_error( "$spec_error for '$key'" ); + } + + } elsif ($spec->{':key'}) { + $spec->{':key'}{name}->($self,$key,$key); + if($spec->{':key'}{value}) { + $spec->{':key'}{value}->($self,$key,$data->{$key}); + } elsif($spec->{':key'}{'map'}) { + $self->check_map($spec->{':key'}{'map'},$data->{$key}); + } elsif($spec->{':key'}{'list'}) { + $self->check_list($spec->{':key'}{'list'},$data->{$key}); + } elsif($spec->{':key'}{'lazylist'}) { + $self->check_lazylist($spec->{':key'}{'lazylist'},$data->{$key}); + } else { + $self->_error( "$spec_error for ':key'" ); + } + + + } else { + $self->_error( "Unknown key, '$key', found in map structure" ); + } + pop @{$self->{stack}}; + } + } + + # if it's a string, make it into a list and check the list + sub check_lazylist { + my ($self,$spec,$data) = @_; + + if ( defined $data && ! ref($data) ) { + $data = [ $data ]; + } + + $self->check_list($spec,$data); + } + + sub check_list { + my ($self,$spec,$data) = @_; + + if(ref($data) ne 'ARRAY') { + $self->_error( "Expected a list structure" ); + return; + } + + if(defined $spec->{mandatory}) { + if(!defined $data->[0]) { + $self->_error( "Missing entries from mandatory list" ); + } + } + + for my $value (@$data) { + push @{$self->{stack}}, $value || "<undef>"; + if(defined $spec->{value}) { + $spec->{value}->($self,'list',$value); + } elsif(defined $spec->{'map'}) { + $self->check_map($spec->{'map'},$value); + } elsif(defined $spec->{'list'}) { + $self->check_list($spec->{'list'},$value); + } elsif(defined $spec->{'lazylist'}) { + $self->check_lazylist($spec->{'lazylist'},$value); + } elsif ($spec->{':key'}) { + $self->check_map($spec,$value); + } else { + $self->_error( "$spec_error associated with '$self->{stack}[-2]'" ); + } + pop @{$self->{stack}}; + } + } + + + sub header { + my ($self,$key,$value) = @_; + if(defined $value) { + return 1 if($value && $value =~ /^--- #YAML:1.0/); + } + $self->_error( "file does not have a valid YAML header." ); + return 0; + } + + sub release_status { + my ($self,$key,$value) = @_; + if(defined $value) { + my $version = $self->{data}{version} || ''; + if ( $version =~ /_/ ) { + return 1 if ( $value =~ /\A(?:testing|unstable)\z/ ); + $self->_error( "'$value' for '$key' is invalid for version '$version'" ); + } + else { + return 1 if ( $value =~ /\A(?:stable|testing|unstable)\z/ ); + $self->_error( "'$value' for '$key' is invalid" ); + } + } + else { + $self->_error( "'$key' is not defined" ); + } + return 0; + } + + # _uri_split taken from URI::Split by Gisle Aas, Copyright 2003 + sub _uri_split { + return $_[0] =~ m,(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?,; + } + + sub url { + my ($self,$key,$value) = @_; + if(defined $value) { + my ($scheme, $auth, $path, $query, $frag) = _uri_split($value); + unless ( defined $scheme && length $scheme ) { + $self->_error( "'$value' for '$key' does not have a URL scheme" ); + return 0; + } + unless ( defined $auth && length $auth ) { + $self->_error( "'$value' for '$key' does not have a URL authority" ); + return 0; + } + return 1; + } + $value ||= ''; + $self->_error( "'$value' for '$key' is not a valid URL." ); + return 0; + } + + sub urlspec { + my ($self,$key,$value) = @_; + if(defined $value) { + return 1 if($value && $known_specs{$self->{spec}} eq $value); + if($value && $known_urls{$value}) { + $self->_error( 'META specification URL does not match version' ); + return 0; + } + } + $self->_error( 'Unknown META specification' ); + return 0; + } + + sub anything { return 1 } + + sub string { + my ($self,$key,$value) = @_; + if(defined $value) { + return 1 if($value || $value =~ /^0$/); + } + $self->_error( "value is an undefined string" ); + return 0; + } + + sub string_or_undef { + my ($self,$key,$value) = @_; + return 1 unless(defined $value); + return 1 if($value || $value =~ /^0$/); + $self->_error( "No string defined for '$key'" ); + return 0; + } + + sub file { + my ($self,$key,$value) = @_; + return 1 if(defined $value); + $self->_error( "No file defined for '$key'" ); + return 0; + } + + sub exversion { + my ($self,$key,$value) = @_; + if(defined $value && ($value || $value =~ /0/)) { + my $pass = 1; + for(split(",",$value)) { $self->version($key,$_) or ($pass = 0); } + return $pass; + } + $value = '<undef>' unless(defined $value); + $self->_error( "'$value' for '$key' is not a valid version." ); + return 0; + } + + sub version { + my ($self,$key,$value) = @_; + if(defined $value) { + return 0 unless($value || $value =~ /0/); + return 1 if($value =~ /^\s*((<|<=|>=|>|!=|==)\s*)?v?\d+((\.\d+((_|\.)\d+)?)?)/); + } else { + $value = '<undef>'; + } + $self->_error( "'$value' for '$key' is not a valid version." ); + return 0; + } + + sub boolean { + my ($self,$key,$value) = @_; + if(defined $value) { + return 1 if($value =~ /^(0|1|true|false)$/); + } else { + $value = '<undef>'; + } + $self->_error( "'$value' for '$key' is not a boolean value." ); + return 0; + } + + my %v1_licenses = ( + 'perl' => 'http://dev.perl.org/licenses/', + 'gpl' => 'http://www.opensource.org/licenses/gpl-license.php', + 'apache' => 'http://apache.org/licenses/LICENSE-2.0', + 'artistic' => 'http://opensource.org/licenses/artistic-license.php', + 'artistic_2' => 'http://opensource.org/licenses/artistic-license-2.0.php', + 'lgpl' => 'http://www.opensource.org/licenses/lgpl-license.phpt', + 'bsd' => 'http://www.opensource.org/licenses/bsd-license.php', + 'gpl' => 'http://www.opensource.org/licenses/gpl-license.php', + 'mit' => 'http://opensource.org/licenses/mit-license.php', + 'mozilla' => 'http://opensource.org/licenses/mozilla1.1.php', + 'open_source' => undef, + 'unrestricted' => undef, + 'restrictive' => undef, + 'unknown' => undef, + ); + + my %v2_licenses = map { $_ => 1 } qw( + agpl_3 + apache_1_1 + apache_2_0 + artistic_1 + artistic_2 + bsd + freebsd + gfdl_1_2 + gfdl_1_3 + gpl_1 + gpl_2 + gpl_3 + lgpl_2_1 + lgpl_3_0 + mit + mozilla_1_0 + mozilla_1_1 + openssl + perl_5 + qpl_1_0 + ssleay + sun + zlib + open_source + restricted + unrestricted + unknown + ); + + sub license { + my ($self,$key,$value) = @_; + my $licenses = $self->{spec} < 2 ? \%v1_licenses : \%v2_licenses; + if(defined $value) { + return 1 if($value && exists $licenses->{$value}); + } else { + $value = '<undef>'; + } + $self->_error( "License '$value' is invalid" ); + return 0; + } + + sub custom_1 { + my ($self,$key) = @_; + if(defined $key) { + # a valid user defined key should be alphabetic + # and contain at least one capital case letter. + return 1 if($key && $key =~ /^[_a-z]+$/i && $key =~ /[A-Z]/); + } else { + $key = '<undef>'; + } + $self->_error( "Custom resource '$key' must be in CamelCase." ); + return 0; + } + + sub custom_2 { + my ($self,$key) = @_; + if(defined $key) { + return 1 if($key && $key =~ /^x_/i); # user defined + } else { + $key = '<undef>'; + } + $self->_error( "Custom key '$key' must begin with 'x_' or 'X_'." ); + return 0; + } + + sub identifier { + my ($self,$key) = @_; + if(defined $key) { + return 1 if($key && $key =~ /^([a-z][_a-z]+)$/i); # spec 2.0 defined + } else { + $key = '<undef>'; + } + $self->_error( "Key '$key' is not a legal identifier." ); + return 0; + } + + sub module { + my ($self,$key) = @_; + if(defined $key) { + return 1 if($key && $key =~ /^[A-Za-z0-9_]+(::[A-Za-z0-9_]+)*$/); + } else { + $key = '<undef>'; + } + $self->_error( "Key '$key' is not a legal module name." ); + return 0; + } + + my @valid_phases = qw/ configure build test runtime develop /; + sub phase { + my ($self,$key) = @_; + if(defined $key) { + return 1 if( length $key && grep { $key eq $_ } @valid_phases ); + return 1 if $key =~ /x_/i; + } else { + $key = '<undef>'; + } + $self->_error( "Key '$key' is not a legal phase." ); + return 0; + } + + my @valid_relations = qw/ requires recommends suggests conflicts /; + sub relation { + my ($self,$key) = @_; + if(defined $key) { + return 1 if( length $key && grep { $key eq $_ } @valid_relations ); + return 1 if $key =~ /x_/i; + } else { + $key = '<undef>'; + } + $self->_error( "Key '$key' is not a legal prereq relationship." ); + return 0; + } + + sub _error { + my $self = shift; + my $mess = shift; + + $mess .= ' ('.join(' -> ',@{$self->{stack}}).')' if($self->{stack}); + $mess .= " [Validation: $self->{spec}]"; + + push @{$self->{errors}}, $mess; + } + + 1; + + + + + __END__ + + + +CPAN_META_VALIDATOR + +$fatpacked{"CPAN/Meta/YAML.pm"} = <<'CPAN_META_YAML'; + package CPAN::Meta::YAML; + BEGIN { + $CPAN::Meta::YAML::VERSION = '0.003'; + } + + use strict; + + # UTF Support? + sub HAVE_UTF8 () { $] >= 5.007003 } + BEGIN { + if ( HAVE_UTF8 ) { + # The string eval helps hide this from Test::MinimumVersion + eval "require utf8;"; + die "Failed to load UTF-8 support" if $@; + } + + # Class structure + require 5.004; + require Exporter; + require Carp; + @CPAN::Meta::YAML::ISA = qw{ Exporter }; + @CPAN::Meta::YAML::EXPORT = qw{ Load Dump }; + @CPAN::Meta::YAML::EXPORT_OK = qw{ LoadFile DumpFile freeze thaw }; + + # Error storage + $CPAN::Meta::YAML::errstr = ''; + } + + # The character class of all characters we need to escape + # NOTE: Inlined, since it's only used once + # my $RE_ESCAPE = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f\"\n]'; + + # Printed form of the unprintable characters in the lowest range + # of ASCII characters, listed by ASCII ordinal position. + my @UNPRINTABLE = qw( + z x01 x02 x03 x04 x05 x06 a + x08 t n v f r x0e x0f + x10 x11 x12 x13 x14 x15 x16 x17 + x18 x19 x1a e x1c x1d x1e x1f + ); + + # Printable characters for escapes + my %UNESCAPES = ( + z => "\x00", a => "\x07", t => "\x09", + n => "\x0a", v => "\x0b", f => "\x0c", + r => "\x0d", e => "\x1b", '\\' => '\\', + ); + + # Special magic boolean words + my %QUOTE = map { $_ => 1 } qw{ + null Null NULL + y Y yes Yes YES n N no No NO + true True TRUE false False FALSE + on On ON off Off OFF + }; + + + + + + ##################################################################### + # Implementation + + # Create an empty CPAN::Meta::YAML object + sub new { + my $class = shift; + bless [ @_ ], $class; + } + + # Create an object from a file + sub read { + my $class = ref $_[0] ? ref shift : shift; + + # Check the file + my $file = shift or return $class->_error( 'You did not specify a file name' ); + return $class->_error( "File '$file' does not exist" ) unless -e $file; + return $class->_error( "'$file' is a directory, not a file" ) unless -f _; + return $class->_error( "Insufficient permissions to read '$file'" ) unless -r _; + + # Slurp in the file + local $/ = undef; + local *CFG; + unless ( open(CFG, $file) ) { + return $class->_error("Failed to open file '$file': $!"); + } + my $contents = <CFG>; + unless ( close(CFG) ) { + return $class->_error("Failed to close file '$file': $!"); + } + + $class->read_string( $contents ); + } + + # Create an object from a string + sub read_string { + my $class = ref $_[0] ? ref shift : shift; + my $self = bless [], $class; + my $string = $_[0]; + eval { + unless ( defined $string ) { + die \"Did not provide a string to load"; + } + + # Byte order marks + # NOTE: Keeping this here to educate maintainers + # my %BOM = ( + # "\357\273\277" => 'UTF-8', + # "\376\377" => 'UTF-16BE', + # "\377\376" => 'UTF-16LE', + # "\377\376\0\0" => 'UTF-32LE' + # "\0\0\376\377" => 'UTF-32BE', + # ); + if ( $string =~ /^(?:\376\377|\377\376|\377\376\0\0|\0\0\376\377)/ ) { + die \"Stream has a non UTF-8 BOM"; + } else { + # Strip UTF-8 bom if found, we'll just ignore it + $string =~ s/^\357\273\277//; + } + + # Try to decode as utf8 + utf8::decode($string) if HAVE_UTF8; + + # Check for some special cases + return $self unless length $string; + unless ( $string =~ /[\012\015]+\z/ ) { + die \"Stream does not end with newline character"; + } + + # Split the file into lines + my @lines = grep { ! /^\s*(?:\#.*)?\z/ } + split /(?:\015{1,2}\012|\015|\012)/, $string; + + # Strip the initial YAML header + @lines and $lines[0] =~ /^\%YAML[: ][\d\.]+.*\z/ and shift @lines; + + # A nibbling parser + while ( @lines ) { + # Do we have a document header? + if ( $lines[0] =~ /^---\s*(?:(.+)\s*)?\z/ ) { + # Handle scalar documents + shift @lines; + if ( defined $1 and $1 !~ /^(?:\#.+|\%YAML[: ][\d\.]+)\z/ ) { + push @$self, $self->_read_scalar( "$1", [ undef ], \@lines ); + next; + } + } + + if ( ! @lines or $lines[0] =~ /^(?:---|\.\.\.)/ ) { + # A naked document + push @$self, undef; + while ( @lines and $lines[0] !~ /^---/ ) { + shift @lines; + } + + } elsif ( $lines[0] =~ /^\s*\-/ ) { + # An array at the root + my $document = [ ]; + push @$self, $document; + $self->_read_array( $document, [ 0 ], \@lines ); + + } elsif ( $lines[0] =~ /^(\s*)\S/ ) { + # A hash at the root + my $document = { }; + push @$self, $document; + $self->_read_hash( $document, [ length($1) ], \@lines ); + + } else { + die \"CPAN::Meta::YAML failed to classify the line '$lines[0]'"; + } + } + }; + if ( ref $@ eq 'SCALAR' ) { + return $self->_error(${$@}); + } elsif ( $@ ) { + require Carp; + Carp::croak($@); + } + + return $self; + } + + # Deparse a scalar string to the actual scalar + sub _read_scalar { + my ($self, $string, $indent, $lines) = @_; + + # Trim trailing whitespace + $string =~ s/\s*\z//; + + # Explitic null/undef + return undef if $string eq '~'; + + # Single quote + if ( $string =~ /^\'(.*?)\'(?:\s+\#.*)?\z/ ) { + return '' unless defined $1; + $string = $1; + $string =~ s/\'\'/\'/g; + return $string; + } + + # Double quote. + # The commented out form is simpler, but overloaded the Perl regex + # engine due to recursion and backtracking problems on strings + # larger than 32,000ish characters. Keep it for reference purposes. + # if ( $string =~ /^\"((?:\\.|[^\"])*)\"\z/ ) { + if ( $string =~ /^\"([^\\"]*(?:\\.[^\\"]*)*)\"(?:\s+\#.*)?\z/ ) { + # Reusing the variable is a little ugly, + # but avoids a new variable and a string copy. + $string = $1; + $string =~ s/\\"/"/g; + $string =~ s/\\([never\\fartz]|x([0-9a-fA-F]{2}))/(length($1)>1)?pack("H2",$2):$UNESCAPES{$1}/gex; + return $string; + } + + # Special cases + if ( $string =~ /^[\'\"!&]/ ) { + die \"CPAN::Meta::YAML does not support a feature in line '$string'"; + } + return {} if $string =~ /^{}(?:\s+\#.*)?\z/; + return [] if $string =~ /^\[\](?:\s+\#.*)?\z/; + + # Regular unquoted string + if ( $string !~ /^[>|]/ ) { + if ( + $string =~ /^(?:-(?:\s|$)|[\@\%\`])/ + or + $string =~ /:(?:\s|$)/ + ) { + die \"CPAN::Meta::YAML found illegal characters in plain scalar: '$string'"; + } + $string =~ s/\s+#.*\z//; + return $string; + } + + # Error + die \"CPAN::Meta::YAML failed to find multi-line scalar content" unless @$lines; + + # Check the indent depth + $lines->[0] =~ /^(\s*)/; + $indent->[-1] = length("$1"); + if ( defined $indent->[-2] and $indent->[-1] <= $indent->[-2] ) { + die \"CPAN::Meta::YAML found bad indenting in line '$lines->[0]'"; + } + + # Pull the lines + my @multiline = (); + while ( @$lines ) { + $lines->[0] =~ /^(\s*)/; + last unless length($1) >= $indent->[-1]; + push @multiline, substr(shift(@$lines), length($1)); + } + + my $j = (substr($string, 0, 1) eq '>') ? ' ' : "\n"; + my $t = (substr($string, 1, 1) eq '-') ? '' : "\n"; + return join( $j, @multiline ) . $t; + } + + # Parse an array + sub _read_array { + my ($self, $array, $indent, $lines) = @_; + + while ( @$lines ) { + # Check for a new document + if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) { + while ( @$lines and $lines->[0] !~ /^---/ ) { + shift @$lines; + } + return 1; + } + + # Check the indent level + $lines->[0] =~ /^(\s*)/; + if ( length($1) < $indent->[-1] ) { + return 1; + } elsif ( length($1) > $indent->[-1] ) { + die \"CPAN::Meta::YAML found bad indenting in line '$lines->[0]'"; + } + + if ( $lines->[0] =~ /^(\s*\-\s+)[^\'\"]\S*\s*:(?:\s+|$)/ ) { + # Inline nested hash + my $indent2 = length("$1"); + $lines->[0] =~ s/-/ /; + push @$array, { }; + $self->_read_hash( $array->[-1], [ @$indent, $indent2 ], $lines ); + + } elsif ( $lines->[0] =~ /^\s*\-(\s*)(.+?)\s*\z/ ) { + # Array entry with a value + shift @$lines; + push @$array, $self->_read_scalar( "$2", [ @$indent, undef ], $lines ); + + } elsif ( $lines->[0] =~ /^\s*\-\s*\z/ ) { + shift @$lines; + unless ( @$lines ) { + push @$array, undef; + return 1; + } + if ( $lines->[0] =~ /^(\s*)\-/ ) { + my $indent2 = length("$1"); + if ( $indent->[-1] == $indent2 ) { + # Null array entry + push @$array, undef; + } else { + # Naked indenter + push @$array, [ ]; + $self->_read_array( $array->[-1], [ @$indent, $indent2 ], $lines ); + } + + } elsif ( $lines->[0] =~ /^(\s*)\S/ ) { + push @$array, { }; + $self->_read_hash( $array->[-1], [ @$indent, length("$1") ], $lines ); + + } else { + die \"CPAN::Meta::YAML failed to classify line '$lines->[0]'"; + } + + } elsif ( defined $indent->[-2] and $indent->[-1] == $indent->[-2] ) { + # This is probably a structure like the following... + # --- + # foo: + # - list + # bar: value + # + # ... so lets return and let the hash parser handle it + return 1; + + } else { + die \"CPAN::Meta::YAML failed to classify line '$lines->[0]'"; + } + } + + return 1; + } + + # Parse an array + sub _read_hash { + my ($self, $hash, $indent, $lines) = @_; + + while ( @$lines ) { + # Check for a new document + if ( $lines->[0] =~ /^(?:---|\.\.\.)/ ) { + while ( @$lines and $lines->[0] !~ /^---/ ) { + shift @$lines; + } + return 1; + } + + # Check the indent level + $lines->[0] =~ /^(\s*)/; + if ( length($1) < $indent->[-1] ) { + return 1; + } elsif ( length($1) > $indent->[-1] ) { + die \"CPAN::Meta::YAML found bad indenting in line '$lines->[0]'"; + } + + # Get the key + unless ( $lines->[0] =~ s/^\s*([^\'\" ][^\n]*?)\s*:(\s+(?:\#.*)?|$)// ) { + if ( $lines->[0] =~ /^\s*[?\'\"]/ ) { + die \"CPAN::Meta::YAML does not support a feature in line '$lines->[0]'"; + } + die \"CPAN::Meta::YAML failed to classify line '$lines->[0]'"; + } + my $key = $1; + + # Do we have a value? + if ( length $lines->[0] ) { + # Yes + $hash->{$key} = $self->_read_scalar( shift(@$lines), [ @$indent, undef ], $lines ); + } else { + # An indent + shift @$lines; + unless ( @$lines ) { + $hash->{$key} = undef; + return 1; + } + if ( $lines->[0] =~ /^(\s*)-/ ) { + $hash->{$key} = []; + $self->_read_array( $hash->{$key}, [ @$indent, length($1) ], $lines ); + } elsif ( $lines->[0] =~ /^(\s*)./ ) { + my $indent2 = length("$1"); + if ( $indent->[-1] >= $indent2 ) { + # Null hash entry + $hash->{$key} = undef; + } else { + $hash->{$key} = {}; + $self->_read_hash( $hash->{$key}, [ @$indent, length($1) ], $lines ); + } + } + } + } + + return 1; + } + + # Save an object to a file + sub write { + my $self = shift; + my $file = shift or return $self->_error('No file name provided'); + + # Write it to the file + open( CFG, '>' . $file ) or return $self->_error( + "Failed to open file '$file' for writing: $!" + ); + print CFG $self->write_string; + close CFG; + + return 1; + } + + # Save an object to a string + sub write_string { + my $self = shift; + return '' unless @$self; + + # Iterate over the documents + my $indent = 0; + my @lines = (); + foreach my $cursor ( @$self ) { + push @lines, '---'; + + # An empty document + if ( ! defined $cursor ) { + # Do nothing + + # A scalar document + } elsif ( ! ref $cursor ) { + $lines[-1] .= ' ' . $self->_write_scalar( $cursor, $indent ); + + # A list at the root + } elsif ( ref $cursor eq 'ARRAY' ) { + unless ( @$cursor ) { + $lines[-1] .= ' []'; + next; + } + push @lines, $self->_write_array( $cursor, $indent, {} ); + + # A hash at the root + } elsif ( ref $cursor eq 'HASH' ) { + unless ( %$cursor ) { + $lines[-1] .= ' {}'; + next; + } + push @lines, $self->_write_hash( $cursor, $indent, {} ); + + } else { + Carp::croak("Cannot serialize " . ref($cursor)); + } + } + + join '', map { "$_\n" } @lines; + } + + sub _write_scalar { + my $string = $_[1]; + return '~' unless defined $string; + return "''" unless length $string; + if ( $string =~ /[\x00-\x08\x0b-\x0d\x0e-\x1f\"\'\n]/ ) { + $string =~ s/\\/\\\\/g; + $string =~ s/"/\\"/g; + $string =~ s/\n/\\n/g; + $string =~ s/([\x00-\x1f])/\\$UNPRINTABLE[ord($1)]/g; + return qq|"$string"|; + } + if ( $string =~ /(?:^\W|\s)/ or $QUOTE{$string} ) { + return "'$string'"; + } + return $string; + } + + sub _write_array { + my ($self, $array, $indent, $seen) = @_; + if ( $seen->{refaddr($array)}++ ) { + die "CPAN::Meta::YAML does not support circular references"; + } + my @lines = (); + foreach my $el ( @$array ) { + my $line = (' ' x $indent) . '-'; + my $type = ref $el; + if ( ! $type ) { + $line .= ' ' . $self->_write_scalar( $el, $indent + 1 ); + push @lines, $line; + + } elsif ( $type eq 'ARRAY' ) { + if ( @$el ) { + push @lines, $line; + push @lines, $self->_write_array( $el, $indent + 1, $seen ); + } else { + $line .= ' []'; + push @lines, $line; + } + + } elsif ( $type eq 'HASH' ) { + if ( keys %$el ) { + push @lines, $line; + push @lines, $self->_write_hash( $el, $indent + 1, $seen ); + } else { + $line .= ' {}'; + push @lines, $line; + } + + } else { + die "CPAN::Meta::YAML does not support $type references"; + } + } + + @lines; + } + + sub _write_hash { + my ($self, $hash, $indent, $seen) = @_; + if ( $seen->{refaddr($hash)}++ ) { + die "CPAN::Meta::YAML does not support circular references"; + } + my @lines = (); + foreach my $name ( sort keys %$hash ) { + my $el = $hash->{$name}; + my $line = (' ' x $indent) . "$name:"; + my $type = ref $el; + if ( ! $type ) { + $line .= ' ' . $self->_write_scalar( $el, $indent + 1 ); + push @lines, $line; + + } elsif ( $type eq 'ARRAY' ) { + if ( @$el ) { + push @lines, $line; + push @lines, $self->_write_array( $el, $indent + 1, $seen ); + } else { + $line .= ' []'; + push @lines, $line; + } + + } elsif ( $type eq 'HASH' ) { + if ( keys %$el ) { + push @lines, $line; + push @lines, $self->_write_hash( $el, $indent + 1, $seen ); + } else { + $line .= ' {}'; + push @lines, $line; + } + + } else { + die "CPAN::Meta::YAML does not support $type references"; + } + } + + @lines; + } + + # Set error + sub _error { + $CPAN::Meta::YAML::errstr = $_[1]; + undef; + } + + # Retrieve error + sub errstr { + $CPAN::Meta::YAML::errstr; + } + + + + + + ##################################################################### + # YAML Compatibility + + sub Dump { + CPAN::Meta::YAML->new(@_)->write_string; + } + + sub Load { + my $self = CPAN::Meta::YAML->read_string(@_); + unless ( $self ) { + Carp::croak("Failed to load YAML document from string"); + } + if ( wantarray ) { + return @$self; + } else { + # To match YAML.pm, return the last document + return $self->[-1]; + } + } + + BEGIN { + *freeze = *Dump; + *thaw = *Load; + } + + sub DumpFile { + my $file = shift; + CPAN::Meta::YAML->new(@_)->write($file); + } + + sub LoadFile { + my $self = CPAN::Meta::YAML->read($_[0]); + unless ( $self ) { + Carp::croak("Failed to load YAML document from '" . ($_[0] || '') . "'"); + } + if ( wantarray ) { + return @$self; + } else { + # Return only the last document to match YAML.pm, + return $self->[-1]; + } + } + + + + + + ##################################################################### + # Use Scalar::Util if possible, otherwise emulate it + + BEGIN { + eval { + require Scalar::Util; + *refaddr = *Scalar::Util::refaddr; + }; + eval <<'END_PERL' if $@; + # Failed to load Scalar::Util + sub refaddr { + my $pkg = ref($_[0]) or return undef; + if ( !! UNIVERSAL::can($_[0], 'can') ) { + bless $_[0], 'Scalar::Util::Fake'; + } else { + $pkg = undef; + } + "$_[0]" =~ /0x(\w+)/; + my $i = do { local $^W; hex $1 }; + bless $_[0], $pkg if defined $pkg; + $i; + } + END_PERL + + } + + 1; + + + + + __END__ + + + # ABSTRACT: Read and write a subset of YAML for CPAN Meta files + + +CPAN_META_YAML + +$fatpacked{"HTTP/Tiny.pm"} = <<'HTTP_TINY'; + # vim: ts=4 sts=4 sw=4 et: + # + # This file is part of HTTP-Tiny + # + # This software is copyright (c) 2011 by Christian Hansen. + # + # This is free software; you can redistribute it and/or modify it under + # the same terms as the Perl 5 programming language system itself. + # + package HTTP::Tiny; + BEGIN { + $HTTP::Tiny::VERSION = '0.009'; + } + use strict; + use warnings; + # ABSTRACT: A small, simple, correct HTTP/1.1 client + + use Carp (); + + + my @attributes; + BEGIN { + @attributes = qw(agent default_headers max_redirect max_size proxy timeout); + no strict 'refs'; + for my $accessor ( @attributes ) { + *{$accessor} = sub { + @_ > 1 ? $_[0]->{$accessor} = $_[1] : $_[0]->{$accessor}; + }; + } + } + + sub new { + my($class, %args) = @_; + (my $agent = $class) =~ s{::}{-}g; + my $self = { + agent => $agent . "/" . ($class->VERSION || 0), + max_redirect => 5, + timeout => 60, + }; + for my $key ( @attributes ) { + $self->{$key} = $args{$key} if exists $args{$key} + } + return bless $self, $class; + } + + + sub get { + my ($self, $url, $args) = @_; + @_ == 2 || (@_ == 3 && ref $args eq 'HASH') + or Carp::croak(q/Usage: $http->get(URL, [HASHREF])/); + return $self->request('GET', $url, $args || {}); + } + + + sub mirror { + my ($self, $url, $file, $args) = @_; + @_ == 3 || (@_ == 4 && ref $args eq 'HASH') + or Carp::croak(q/Usage: $http->mirror(URL, FILE, [HASHREF])/); + if ( -e $file and my $mtime = (stat($file))[9] ) { + $args->{headers}{'if-modified-since'} ||= $self->_http_date($mtime); + } + my $tempfile = $file . int(rand(2**31)); + open my $fh, ">", $tempfile + or Carp::croak(qq/Error: Could not open temporary file $tempfile for downloading: $!/); + $args->{data_callback} = sub { print {$fh} $_[0] }; + my $response = $self->request('GET', $url, $args); + close $fh + or Carp::croak(qq/Error: Could not close temporary file $tempfile: $!/); + if ( $response->{success} ) { + rename $tempfile, $file + or Carp::croak "Error replacing $file with $tempfile: $!\n"; + my $lm = $response->{headers}{'last-modified'}; + if ( $lm and my $mtime = $self->_parse_http_date($lm) ) { + utime $mtime, $mtime, $file; + } + } + $response->{success} ||= $response->{status} eq '304'; + unlink $tempfile; + return $response; + } + + + my %idempotent = map { $_ => 1 } qw/GET HEAD PUT DELETE OPTIONS TRACE/; + + sub request { + my ($self, $method, $url, $args) = @_; + @_ == 3 || (@_ == 4 && ref $args eq 'HASH') + or Carp::croak(q/Usage: $http->request(METHOD, URL, [HASHREF])/); + $args ||= {}; # we keep some state in this during _request + + # RFC 2616 Section 8.1.4 mandates a single retry on broken socket + my $response; + for ( 0 .. 1 ) { + $response = eval { $self->_request($method, $url, $args) }; + last unless $@ && $idempotent{$method} + && $@ =~ m{^(?:Socket closed|Unexpected end)}; + } + + if (my $e = "$@") { + $response = { + success => q{}, + status => 599, + reason => 'Internal Exception', + content => $e, + headers => { + 'content-type' => 'text/plain', + 'content-length' => length $e, + } + }; + } + return $response; + } + + my %DefaultPort = ( + http => 80, + https => 443, + ); + + sub _request { + my ($self, $method, $url, $args) = @_; + + my ($scheme, $host, $port, $path_query) = $self->_split_url($url); + + my $request = { + method => $method, + scheme => $scheme, + host_port => ($port == $DefaultPort{$scheme} ? $host : "$host:$port"), + uri => $path_query, + headers => {}, + }; + + my $handle = HTTP::Tiny::Handle->new(timeout => $self->{timeout}); + + if ($self->{proxy}) { + $request->{uri} = "$scheme://$request->{host_port}$path_query"; + croak(qq/HTTPS via proxy is not supported/) + if $request->{scheme} eq 'https'; + $handle->connect(($self->_split_url($self->{proxy}))[0..2]); + } + else { + $handle->connect($scheme, $host, $port); + } + + $self->_prepare_headers_and_cb($request, $args); + $handle->write_request($request); + + my $response; + do { $response = $handle->read_response_header } + until (substr($response->{status},0,1) ne '1'); + + if ( my @redir_args = $self->_maybe_redirect($request, $response, $args) ) { + $handle->close; + return $self->_request(@redir_args, $args); + } + + if ($method eq 'HEAD' || $response->{status} =~ /^[23]04/) { + # response has no message body + } + else { + my $data_cb = $self->_prepare_data_cb($response, $args); + $handle->read_body($data_cb, $response); + } + + $handle->close; + $response->{success} = substr($response->{status},0,1) eq '2'; + return $response; + } + + sub _prepare_headers_and_cb { + my ($self, $request, $args) = @_; + + for ($self->{default_headers}, $args->{headers}) { + next unless defined; + while (my ($k, $v) = each %$_) { + $request->{headers}{lc $k} = $v; + } + } + $request->{headers}{'host'} = $request->{host_port}; + $request->{headers}{'connection'} = "close"; + $request->{headers}{'user-agent'} ||= $self->{agent}; + + if (defined $args->{content}) { + $request->{headers}{'content-type'} ||= "application/octet-stream"; + if (ref $args->{content} eq 'CODE') { + $request->{headers}{'transfer-encoding'} = 'chunked' + unless $request->{headers}{'content-length'} + || $request->{headers}{'transfer-encoding'}; + $request->{cb} = $args->{content}; + } + else { + my $content = $args->{content}; + if ( $] ge '5.008' ) { + utf8::downgrade($content, 1) + or Carp::croak(q/Wide character in request message body/); + } + $request->{headers}{'content-length'} = length $content + unless $request->{headers}{'content-length'} + || $request->{headers}{'transfer-encoding'}; + $request->{cb} = sub { substr $content, 0, length $content, '' }; + } + $request->{trailer_cb} = $args->{trailer_callback} + if ref $args->{trailer_callback} eq 'CODE'; + } + return; + } + + sub _prepare_data_cb { + my ($self, $response, $args) = @_; + my $data_cb = $args->{data_callback}; + $response->{content} = ''; + + if (!$data_cb || $response->{status} !~ /^2/) { + if (defined $self->{max_size}) { + $data_cb = sub { + $_[1]->{content} .= $_[0]; + die(qq/Size of response body exceeds the maximum allowed of $self->{max_size}\n/) + if length $_[1]->{content} > $self->{max_size}; + }; + } + else { + $data_cb = sub { $_[1]->{content} .= $_[0] }; + } + } + return $data_cb; + } + + sub _maybe_redirect { + my ($self, $request, $response, $args) = @_; + my $headers = $response->{headers}; + my ($status, $method) = ($response->{status}, $request->{method}); + if (($status eq '303' or ($status =~ /^30[127]/ && $method =~ /^GET|HEAD$/)) + and $headers->{location} + and ++$args->{redirects} <= $self->{max_redirect} + ) { + my $location = ($headers->{location} =~ /^\//) + ? "$request->{scheme}://$request->{host_port}$headers->{location}" + : $headers->{location} ; + return (($status eq '303' ? 'GET' : $method), $location); + } + return; + } + + sub _split_url { + my $url = pop; + + # URI regex adapted from the URI module + my ($scheme, $authority, $path_query) = $url =~ m<\A([^:/?#]+)://([^/?#]*)([^#]*)> + or Carp::croak(qq/Cannot parse URL: '$url'/); + + $scheme = lc $scheme; + $path_query = "/$path_query" unless $path_query =~ m<\A/>; + + my $host = (length($authority)) ? lc $authority : 'localhost'; + $host =~ s/\A[^@]*@//; # userinfo + my $port = do { + $host =~ s/:([0-9]*)\z// && length $1 + ? $1 + : ($scheme eq 'http' ? 80 : $scheme eq 'https' ? 443 : undef); + }; + + return ($scheme, $host, $port, $path_query); + } + + # Date conversions adapted from HTTP::Date + my $DoW = "Sun|Mon|Tue|Wed|Thu|Fri|Sat"; + my $MoY = "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec"; + sub _http_date { + my ($sec, $min, $hour, $mday, $mon, $year, $wday) = gmtime($_[1]); + return sprintf("%s, %02d %s %04d %02d:%02d:%02d GMT", + substr($DoW,$wday*4,3), + $mday, substr($MoY,$mon*4,3), $year+1900, + $hour, $min, $sec + ); + } + + sub _parse_http_date { + my ($self, $str) = @_; + require Time::Local; + my @tl_parts; + if ($str =~ /^[SMTWF][a-z]+, +(\d{1,2}) ($MoY) +(\d\d\d\d) +(\d\d):(\d\d):(\d\d) +GMT$/) { + @tl_parts = ($6, $5, $4, $1, (index($MoY,$2)/4), $3); + } + elsif ($str =~ /^[SMTWF][a-z]+, +(\d\d)-($MoY)-(\d{2,4}) +(\d\d):(\d\d):(\d\d) +GMT$/ ) { + @tl_parts = ($6, $5, $4, $1, (index($MoY,$2)/4), $3); + } + elsif ($str =~ /^[SMTWF][a-z]+ +($MoY) +(\d{1,2}) +(\d\d):(\d\d):(\d\d) +(?:[^0-9]+ +)?(\d\d\d\d)$/ ) { + @tl_parts = ($5, $4, $3, $2, (index($MoY,$1)/4), $6); + } + return eval { + my $t = @tl_parts ? Time::Local::timegm(@tl_parts) : -1; + $t < 0 ? undef : $t; + }; + } + + package + HTTP::Tiny::Handle; # hide from PAUSE/indexers + use strict; + use warnings; + + use Carp qw[croak]; + use Errno qw[EINTR EPIPE]; + use IO::Socket qw[SOCK_STREAM]; + + sub BUFSIZE () { 32768 } + + my $Printable = sub { + local $_ = shift; + s/\r/\\r/g; + s/\n/\\n/g; + s/\t/\\t/g; + s/([^\x20-\x7E])/sprintf('\\x%.2X', ord($1))/ge; + $_; + }; + + my $Token = qr/[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7A\x7C\x7E]/; + + sub new { + my ($class, %args) = @_; + return bless { + rbuf => '', + timeout => 60, + max_line_size => 16384, + max_header_lines => 64, + %args + }, $class; + } + + my $ssl_verify_args = { + check_cn => "when_only", + wildcards_in_alt => "anywhere", + wildcards_in_cn => "anywhere" + }; + + sub connect { + @_ == 4 || croak(q/Usage: $handle->connect(scheme, host, port)/); + my ($self, $scheme, $host, $port) = @_; + + if ( $scheme eq 'https' ) { + eval "require IO::Socket::SSL" + unless exists $INC{'IO/Socket/SSL.pm'}; + croak(qq/IO::Socket::SSL must be installed for https support\n/) + unless $INC{'IO/Socket/SSL.pm'}; + } + elsif ( $scheme ne 'http' ) { + croak(qq/Unsupported URL scheme '$scheme'/); + } + + $self->{fh} = 'IO::Socket::INET'->new( + PeerHost => $host, + PeerPort => $port, + Proto => 'tcp', + Type => SOCK_STREAM, + Timeout => $self->{timeout} + ) or croak(qq/Could not connect to '$host:$port': $@/); + + binmode($self->{fh}) + or croak(qq/Could not binmode() socket: '$!'/); + + if ( $scheme eq 'https') { + IO::Socket::SSL->start_SSL($self->{fh}); + ref($self->{fh}) eq 'IO::Socket::SSL' + or die(qq/SSL connection failed for $host\n/); + $self->{fh}->verify_hostname( $host, $ssl_verify_args ) + or die(qq/SSL certificate not valid for $host\n/); + } + + $self->{host} = $host; + $self->{port} = $port; + + return $self; + } + + sub close { + @_ == 1 || croak(q/Usage: $handle->close()/); + my ($self) = @_; + CORE::close($self->{fh}) + or croak(qq/Could not close socket: '$!'/); + } + + sub write { + @_ == 2 || croak(q/Usage: $handle->write(buf)/); + my ($self, $buf) = @_; + + if ( $] ge '5.008' ) { + utf8::downgrade($buf, 1) + or croak(q/Wide character in write()/); + } + + my $len = length $buf; + my $off = 0; + + local $SIG{PIPE} = 'IGNORE'; + + while () { + $self->can_write + or croak(q/Timed out while waiting for socket to become ready for writing/); + my $r = syswrite($self->{fh}, $buf, $len, $off); + if (defined $r) { + $len -= $r; + $off += $r; + last unless $len > 0; + } + elsif ($! == EPIPE) { + croak(qq/Socket closed by remote server: $!/); + } + elsif ($! != EINTR) { + croak(qq/Could not write to socket: '$!'/); + } + } + return $off; + } + + sub read { + @_ == 2 || @_ == 3 || croak(q/Usage: $handle->read(len [, allow_partial])/); + my ($self, $len, $allow_partial) = @_; + + my $buf = ''; + my $got = length $self->{rbuf}; + + if ($got) { + my $take = ($got < $len) ? $got : $len; + $buf = substr($self->{rbuf}, 0, $take, ''); + $len -= $take; + } + + while ($len > 0) { + $self->can_read + or croak(q/Timed out while waiting for socket to become ready for reading/); + my $r = sysread($self->{fh}, $buf, $len, length $buf); + if (defined $r) { + last unless $r; + $len -= $r; + } + elsif ($! != EINTR) { + croak(qq/Could not read from socket: '$!'/); + } + } + if ($len && !$allow_partial) { + croak(q/Unexpected end of stream/); + } + return $buf; + } + + sub readline { + @_ == 1 || croak(q/Usage: $handle->readline()/); + my ($self) = @_; + + while () { + if ($self->{rbuf} =~ s/\A ([^\x0D\x0A]* \x0D?\x0A)//x) { + return $1; + } + if (length $self->{rbuf} >= $self->{max_line_size}) { + croak(qq/Line size exceeds the maximum allowed size of $self->{max_line_size}/); + } + $self->can_read + or croak(q/Timed out while waiting for socket to become ready for reading/); + my $r = sysread($self->{fh}, $self->{rbuf}, BUFSIZE, length $self->{rbuf}); + if (defined $r) { + last unless $r; + } + elsif ($! != EINTR) { + croak(qq/Could not read from socket: '$!'/); + } + } + croak(q/Unexpected end of stream while looking for line/); + } + + sub read_header_lines { + @_ == 1 || @_ == 2 || croak(q/Usage: $handle->read_header_lines([headers])/); + my ($self, $headers) = @_; + $headers ||= {}; + my $lines = 0; + my $val; + + while () { + my $line = $self->readline; + + if (++$lines >= $self->{max_header_lines}) { + croak(qq/Header lines exceeds maximum number allowed of $self->{max_header_lines}/); + } + elsif ($line =~ /\A ([^\x00-\x1F\x7F:]+) : [\x09\x20]* ([^\x0D\x0A]*)/x) { + my ($field_name) = lc $1; + if (exists $headers->{$field_name}) { + for ($headers->{$field_name}) { + $_ = [$_] unless ref $_ eq "ARRAY"; + push @$_, $2; + $val = \$_->[-1]; + } + } + else { + $val = \($headers->{$field_name} = $2); + } + } + elsif ($line =~ /\A [\x09\x20]+ ([^\x0D\x0A]*)/x) { + $val + or croak(q/Unexpected header continuation line/); + next unless length $1; + $$val .= ' ' if length $$val; + $$val .= $1; + } + elsif ($line =~ /\A \x0D?\x0A \z/x) { + last; + } + else { + croak(q/Malformed header line: / . $Printable->($line)); + } + } + return $headers; + } + + sub write_request { + @_ == 2 || croak(q/Usage: $handle->write_request(request)/); + my($self, $request) = @_; + $self->write_request_header(@{$request}{qw/method uri headers/}); + $self->write_body($request) if $request->{cb}; + return; + } + + my %HeaderCase = ( + 'content-md5' => 'Content-MD5', + 'etag' => 'ETag', + 'te' => 'TE', + 'www-authenticate' => 'WWW-Authenticate', + 'x-xss-protection' => 'X-XSS-Protection', + ); + + sub write_header_lines { + (@_ == 2 && ref $_[1] eq 'HASH') || croak(q/Usage: $handle->write_header_lines(headers)/); + my($self, $headers) = @_; + + my $buf = ''; + while (my ($k, $v) = each %$headers) { + my $field_name = lc $k; + if (exists $HeaderCase{$field_name}) { + $field_name = $HeaderCase{$field_name}; + } + else { + $field_name =~ /\A $Token+ \z/xo + or croak(q/Invalid HTTP header field name: / . $Printable->($field_name)); + $field_name =~ s/\b(\w)/\u$1/g; + $HeaderCase{lc $field_name} = $field_name; + } + for (ref $v eq 'ARRAY' ? @$v : $v) { + /[^\x0D\x0A]/ + or croak(qq/Invalid HTTP header field value ($field_name): / . $Printable->($_)); + $buf .= "$field_name: $_\x0D\x0A"; + } + } + $buf .= "\x0D\x0A"; + return $self->write($buf); + } + + sub read_body { + @_ == 3 || croak(q/Usage: $handle->read_body(callback, response)/); + my ($self, $cb, $response) = @_; + my $te = $response->{headers}{'transfer-encoding'} || ''; + if ( grep { /chunked/i } ( ref $te eq 'ARRAY' ? @$te : $te ) ) { + $self->read_chunked_body($cb, $response); + } + else { + $self->read_content_body($cb, $response); + } + return; + } + + sub write_body { + @_ == 2 || croak(q/Usage: $handle->write_body(request)/); + my ($self, $request) = @_; + if ($request->{headers}{'content-length'}) { + return $self->write_content_body($request); + } + else { + return $self->write_chunked_body($request); + } + } + + sub read_content_body { + @_ == 3 || @_ == 4 || croak(q/Usage: $handle->read_content_body(callback, response, [read_length])/); + my ($self, $cb, $response, $content_length) = @_; + $content_length ||= $response->{headers}{'content-length'}; + + if ( $content_length ) { + my $len = $content_length; + while ($len > 0) { + my $read = ($len > BUFSIZE) ? BUFSIZE : $len; + $cb->($self->read($read, 0), $response); + $len -= $read; + } + } + else { + my $chunk; + $cb->($chunk, $response) while length( $chunk = $self->read(BUFSIZE, 1) ); + } + + return; + } + + sub write_content_body { + @_ == 2 || croak(q/Usage: $handle->write_content_body(request)/); + my ($self, $request) = @_; + + my ($len, $content_length) = (0, $request->{headers}{'content-length'}); + while () { + my $data = $request->{cb}->(); + + defined $data && length $data + or last; + + if ( $] ge '5.008' ) { + utf8::downgrade($data, 1) + or croak(q/Wide character in write_content()/); + } + + $len += $self->write($data); + } + + $len == $content_length + or croak(qq/Content-Length missmatch (got: $len expected: $content_length)/); + + return $len; + } + + sub read_chunked_body { + @_ == 3 || croak(q/Usage: $handle->read_chunked_body(callback, $response)/); + my ($self, $cb, $response) = @_; + + while () { + my $head = $self->readline; + + $head =~ /\A ([A-Fa-f0-9]+)/x + or croak(q/Malformed chunk head: / . $Printable->($head)); + + my $len = hex($1) + or last; + + $self->read_content_body($cb, $response, $len); + + $self->read(2) eq "\x0D\x0A" + or croak(q/Malformed chunk: missing CRLF after chunk data/); + } + $self->read_header_lines($response->{headers}); + return; + } + + sub write_chunked_body { + @_ == 2 || croak(q/Usage: $handle->write_chunked_body(request)/); + my ($self, $request) = @_; + + my $len = 0; + while () { + my $data = $request->{cb}->(); + + defined $data && length $data + or last; + + if ( $] ge '5.008' ) { + utf8::downgrade($data, 1) + or croak(q/Wide character in write_chunked_body()/); + } + + $len += length $data; + + my $chunk = sprintf '%X', length $data; + $chunk .= "\x0D\x0A"; + $chunk .= $data; + $chunk .= "\x0D\x0A"; + + $self->write($chunk); + } + $self->write("0\x0D\x0A"); + $self->write_header_lines($request->{trailer_cb}->()) + if ref $request->{trailer_cb} eq 'CODE'; + return $len; + } + + sub read_response_header { + @_ == 1 || croak(q/Usage: $handle->read_response_header()/); + my ($self) = @_; + + my $line = $self->readline; + + $line =~ /\A (HTTP\/(0*\d+\.0*\d+)) [\x09\x20]+ ([0-9]{3}) [\x09\x20]+ ([^\x0D\x0A]*) \x0D?\x0A/x + or croak(q/Malformed Status-Line: / . $Printable->($line)); + + my ($protocol, $version, $status, $reason) = ($1, $2, $3, $4); + + croak (qq/Unsupported HTTP protocol: $protocol/) + unless $version =~ /0*1\.0*[01]/; + + return { + status => $status, + reason => $reason, + headers => $self->read_header_lines, + protocol => $protocol, + }; + } + + sub write_request_header { + @_ == 4 || croak(q/Usage: $handle->write_request_header(method, request_uri, headers)/); + my ($self, $method, $request_uri, $headers) = @_; + + return $self->write("$method $request_uri HTTP/1.1\x0D\x0A") + + $self->write_header_lines($headers); + } + + sub _do_timeout { + my ($self, $type, $timeout) = @_; + $timeout = $self->{timeout} + unless defined $timeout && $timeout >= 0; + + my $fd = fileno $self->{fh}; + defined $fd && $fd >= 0 + or croak(q/select(2): 'Bad file descriptor'/); + + my $initial = time; + my $pending = $timeout; + my $nfound; + + vec(my $fdset = '', $fd, 1) = 1; + + while () { + $nfound = ($type eq 'read') + ? select($fdset, undef, undef, $pending) + : select(undef, $fdset, undef, $pending) ; + if ($nfound == -1) { + $! == EINTR + or croak(qq/select(2): '$!'/); + redo if !$timeout || ($pending = $timeout - (time - $initial)) > 0; + $nfound = 0; + } + last; + } + $! = 0; + return $nfound; + } + + sub can_read { + @_ == 1 || @_ == 2 || croak(q/Usage: $handle->can_read([timeout])/); + my $self = shift; + return $self->_do_timeout('read', @_) + } + + sub can_write { + @_ == 1 || @_ == 2 || croak(q/Usage: $handle->can_write([timeout])/); + my $self = shift; + return $self->_do_timeout('write', @_) + } + + 1; + + + + __END__ + =pod + +HTTP_TINY + +$fatpacked{"JSON/PP.pm"} = <<'JSON_PP'; + package JSON::PP; + + # JSON-2.0 + + use 5.005; + use strict; + use base qw(Exporter); + use overload (); + + use Carp (); + use B (); + #use Devel::Peek; + + $JSON::PP::VERSION = '2.27200'; + + @JSON::PP::EXPORT = qw(encode_json decode_json from_json to_json); + + # instead of hash-access, i tried index-access for speed. + # but this method is not faster than what i expected. so it will be changed. + + use constant P_ASCII => 0; + use constant P_LATIN1 => 1; + use constant P_UTF8 => 2; + use constant P_INDENT => 3; + use constant P_CANONICAL => 4; + use constant P_SPACE_BEFORE => 5; + use constant P_SPACE_AFTER => 6; + use constant P_ALLOW_NONREF => 7; + use constant P_SHRINK => 8; + use constant P_ALLOW_BLESSED => 9; + use constant P_CONVERT_BLESSED => 10; + use constant P_RELAXED => 11; + + use constant P_LOOSE => 12; + use constant P_ALLOW_BIGNUM => 13; + use constant P_ALLOW_BAREKEY => 14; + use constant P_ALLOW_SINGLEQUOTE => 15; + use constant P_ESCAPE_SLASH => 16; + use constant P_AS_NONBLESSED => 17; + + use constant P_ALLOW_UNKNOWN => 18; + + use constant OLD_PERL => $] < 5.008 ? 1 : 0; + + BEGIN { + my @xs_compati_bit_properties = qw( + latin1 ascii utf8 indent canonical space_before space_after allow_nonref shrink + allow_blessed convert_blessed relaxed allow_unknown + ); + my @pp_bit_properties = qw( + allow_singlequote allow_bignum loose + allow_barekey escape_slash as_nonblessed + ); + + # Perl version check, Unicode handling is enable? + # Helper module sets @JSON::PP::_properties. + if ($] < 5.008 ) { + my $helper = $] >= 5.006 ? 'JSON::PP::Compat5006' : 'JSON::PP::Compat5005'; + eval qq| require $helper |; + if ($@) { Carp::croak $@; } + } + + for my $name (@xs_compati_bit_properties, @pp_bit_properties) { + my $flag_name = 'P_' . uc($name); + + eval qq/ + sub $name { + my \$enable = defined \$_[1] ? \$_[1] : 1; + + if (\$enable) { + \$_[0]->{PROPS}->[$flag_name] = 1; + } + else { + \$_[0]->{PROPS}->[$flag_name] = 0; + } + + \$_[0]; + } + + sub get_$name { + \$_[0]->{PROPS}->[$flag_name] ? 1 : ''; + } + /; + } + + } + + + + # Functions + + my %encode_allow_method + = map {($_ => 1)} qw/utf8 pretty allow_nonref latin1 self_encode escape_slash + allow_blessed convert_blessed indent indent_length allow_bignum + as_nonblessed + /; + my %decode_allow_method + = map {($_ => 1)} qw/utf8 allow_nonref loose allow_singlequote allow_bignum + allow_barekey max_size relaxed/; + + + my $JSON; # cache + + sub encode_json ($) { # encode + ($JSON ||= __PACKAGE__->new->utf8)->encode(@_); + } + + + sub decode_json { # decode + ($JSON ||= __PACKAGE__->new->utf8)->decode(@_); + } + + # Obsoleted + + sub to_json($) { + Carp::croak ("JSON::PP::to_json has been renamed to encode_json."); + } + + + sub from_json($) { + Carp::croak ("JSON::PP::from_json has been renamed to decode_json."); + } + + + # Methods + + sub new { + my $class = shift; + my $self = { + max_depth => 512, + max_size => 0, + indent => 0, + FLAGS => 0, + fallback => sub { encode_error('Invalid value. JSON can only reference.') }, + indent_length => 3, + }; + + bless $self, $class; + } + + + sub encode { + return $_[0]->PP_encode_json($_[1]); + } + + + sub decode { + return $_[0]->PP_decode_json($_[1], 0x00000000); + } + + + sub decode_prefix { + return $_[0]->PP_decode_json($_[1], 0x00000001); + } + + + # accessor + + + # pretty printing + + sub pretty { + my ($self, $v) = @_; + my $enable = defined $v ? $v : 1; + + if ($enable) { # indent_length(3) for JSON::XS compatibility + $self->indent(1)->indent_length(3)->space_before(1)->space_after(1); + } + else { + $self->indent(0)->space_before(0)->space_after(0); + } + + $self; + } + + # etc + + sub max_depth { + my $max = defined $_[1] ? $_[1] : 0x80000000; + $_[0]->{max_depth} = $max; + $_[0]; + } + + + sub get_max_depth { $_[0]->{max_depth}; } + + + sub max_size { + my $max = defined $_[1] ? $_[1] : 0; + $_[0]->{max_size} = $max; + $_[0]; + } + + + sub get_max_size { $_[0]->{max_size}; } + + + sub filter_json_object { + $_[0]->{cb_object} = defined $_[1] ? $_[1] : 0; + $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0; + $_[0]; + } + + sub filter_json_single_key_object { + if (@_ > 1) { + $_[0]->{cb_sk_object}->{$_[1]} = $_[2]; + } + $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0; + $_[0]; + } + + sub indent_length { + if (!defined $_[1] or $_[1] > 15 or $_[1] < 0) { + Carp::carp "The acceptable range of indent_length() is 0 to 15."; + } + else { + $_[0]->{indent_length} = $_[1]; + } + $_[0]; + } + + sub get_indent_length { + $_[0]->{indent_length}; + } + + sub sort_by { + $_[0]->{sort_by} = defined $_[1] ? $_[1] : 1; + $_[0]; + } + + sub allow_bigint { + Carp::carp("allow_bigint() is obsoleted. use allow_bignum() insted."); + } + + ############################### + + ### + ### Perl => JSON + ### + + + { # Convert + + my $max_depth; + my $indent; + my $ascii; + my $latin1; + my $utf8; + my $space_before; + my $space_after; + my $canonical; + my $allow_blessed; + my $convert_blessed; + + my $indent_length; + my $escape_slash; + my $bignum; + my $as_nonblessed; + + my $depth; + my $indent_count; + my $keysort; + + + sub PP_encode_json { + my $self = shift; + my $obj = shift; + + $indent_count = 0; + $depth = 0; + + my $idx = $self->{PROPS}; + + ($ascii, $latin1, $utf8, $indent, $canonical, $space_before, $space_after, $allow_blessed, + $convert_blessed, $escape_slash, $bignum, $as_nonblessed) + = @{$idx}[P_ASCII .. P_SPACE_AFTER, P_ALLOW_BLESSED, P_CONVERT_BLESSED, + P_ESCAPE_SLASH, P_ALLOW_BIGNUM, P_AS_NONBLESSED]; + + ($max_depth, $indent_length) = @{$self}{qw/max_depth indent_length/}; + + $keysort = $canonical ? sub { $a cmp $b } : undef; + + if ($self->{sort_by}) { + $keysort = ref($self->{sort_by}) eq 'CODE' ? $self->{sort_by} + : $self->{sort_by} =~ /\D+/ ? $self->{sort_by} + : sub { $a cmp $b }; + } + + encode_error("hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this)") + if(!ref $obj and !$idx->[ P_ALLOW_NONREF ]); + + my $str = $self->object_to_json($obj); + + $str .= "\n" if ( $indent ); # JSON::XS 2.26 compatible + + unless ($ascii or $latin1 or $utf8) { + utf8::upgrade($str); + } + + if ($idx->[ P_SHRINK ]) { + utf8::downgrade($str, 1); + } + + return $str; + } + + + sub object_to_json { + my ($self, $obj) = @_; + my $type = ref($obj); + + if($type eq 'HASH'){ + return $self->hash_to_json($obj); + } + elsif($type eq 'ARRAY'){ + return $self->array_to_json($obj); + } + elsif ($type) { # blessed object? + if (blessed($obj)) { + + return $self->value_to_json($obj) if ( $obj->isa('JSON::PP::Boolean') ); + + if ( $convert_blessed and $obj->can('TO_JSON') ) { + my $result = $obj->TO_JSON(); + if ( defined $result and ref( $result ) ) { + if ( refaddr( $obj ) eq refaddr( $result ) ) { + encode_error( sprintf( + "%s::TO_JSON method returned same object as was passed instead of a new one", + ref $obj + ) ); + } + } + + return $self->object_to_json( $result ); + } + + return "$obj" if ( $bignum and _is_bignum($obj) ); + return $self->blessed_to_json($obj) if ($allow_blessed and $as_nonblessed); # will be removed. + + encode_error( sprintf("encountered object '%s', but neither allow_blessed " + . "nor convert_blessed settings are enabled", $obj) + ) unless ($allow_blessed); + + return 'null'; + } + else { + return $self->value_to_json($obj); + } + } + else{ + return $self->value_to_json($obj); + } + } + + + sub hash_to_json { + my ($self, $obj) = @_; + my @res; + + encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)") + if (++$depth > $max_depth); + + my ($pre, $post) = $indent ? $self->_up_indent() : ('', ''); + my $del = ($space_before ? ' ' : '') . ':' . ($space_after ? ' ' : ''); + + for my $k ( _sort( $obj ) ) { + if ( OLD_PERL ) { utf8::decode($k) } # key for Perl 5.6 / be optimized + push @res, string_to_json( $self, $k ) + . $del + . ( $self->object_to_json( $obj->{$k} ) || $self->value_to_json( $obj->{$k} ) ); + } + + --$depth; + $self->_down_indent() if ($indent); + + return '{' . ( @res ? $pre : '' ) . ( @res ? join( ",$pre", @res ) . $post : '' ) . '}'; + } + + + sub array_to_json { + my ($self, $obj) = @_; + my @res; + + encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)") + if (++$depth > $max_depth); + + my ($pre, $post) = $indent ? $self->_up_indent() : ('', ''); + + for my $v (@$obj){ + push @res, $self->object_to_json($v) || $self->value_to_json($v); + } + + --$depth; + $self->_down_indent() if ($indent); + + return '[' . ( @res ? $pre : '' ) . ( @res ? join( ",$pre", @res ) . $post : '' ) . ']'; + } + + + sub value_to_json { + my ($self, $value) = @_; + + return 'null' if(!defined $value); + + my $b_obj = B::svref_2object(\$value); # for round trip problem + my $flags = $b_obj->FLAGS; + + return $value # as is + if $flags & ( B::SVp_IOK | B::SVp_NOK ) and !( $flags & B::SVp_POK ); # SvTYPE is IV or NV? + + my $type = ref($value); + + if(!$type){ + return string_to_json($self, $value); + } + elsif( blessed($value) and $value->isa('JSON::PP::Boolean') ){ + return $$value == 1 ? 'true' : 'false'; + } + elsif ($type) { + if ((overload::StrVal($value) =~ /=(\w+)/)[0]) { + return $self->value_to_json("$value"); + } + + if ($type eq 'SCALAR' and defined $$value) { + return $$value eq '1' ? 'true' + : $$value eq '0' ? 'false' + : $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ? 'null' + : encode_error("cannot encode reference to scalar"); + } + + if ( $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ) { + return 'null'; + } + else { + if ( $type eq 'SCALAR' or $type eq 'REF' ) { + encode_error("cannot encode reference to scalar"); + } + else { + encode_error("encountered $value, but JSON can only represent references to arrays or hashes"); + } + } + + } + else { + return $self->{fallback}->($value) + if ($self->{fallback} and ref($self->{fallback}) eq 'CODE'); + return 'null'; + } + + } + + + my %esc = ( + "\n" => '\n', + "\r" => '\r', + "\t" => '\t', + "\f" => '\f', + "\b" => '\b', + "\"" => '\"', + "\\" => '\\\\', + "\'" => '\\\'', + ); + + + sub string_to_json { + my ($self, $arg) = @_; + + $arg =~ s/([\x22\x5c\n\r\t\f\b])/$esc{$1}/g; + $arg =~ s/\//\\\//g if ($escape_slash); + $arg =~ s/([\x00-\x08\x0b\x0e-\x1f])/'\\u00' . unpack('H2', $1)/eg; + + if ($ascii) { + $arg = JSON_PP_encode_ascii($arg); + } + + if ($latin1) { + $arg = JSON_PP_encode_latin1($arg); + } + + if ($utf8) { + utf8::encode($arg); + } + + return '"' . $arg . '"'; + } + + + sub blessed_to_json { + my $reftype = reftype($_[1]) || ''; + if ($reftype eq 'HASH') { + return $_[0]->hash_to_json($_[1]); + } + elsif ($reftype eq 'ARRAY') { + return $_[0]->array_to_json($_[1]); + } + else { + return 'null'; + } + } + + + sub encode_error { + my $error = shift; + Carp::croak "$error"; + } + + + sub _sort { + defined $keysort ? (sort $keysort (keys %{$_[0]})) : keys %{$_[0]}; + } + + + sub _up_indent { + my $self = shift; + my $space = ' ' x $indent_length; + + my ($pre,$post) = ('',''); + + $post = "\n" . $space x $indent_count; + + $indent_count++; + + $pre = "\n" . $space x $indent_count; + + return ($pre,$post); + } + + + sub _down_indent { $indent_count--; } + + + sub PP_encode_box { + { + depth => $depth, + indent_count => $indent_count, + }; + } + + } # Convert + + + sub _encode_ascii { + join('', + map { + $_ <= 127 ? + chr($_) : + $_ <= 65535 ? + sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_)); + } unpack('U*', $_[0]) + ); + } + + + sub _encode_latin1 { + join('', + map { + $_ <= 255 ? + chr($_) : + $_ <= 65535 ? + sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_)); + } unpack('U*', $_[0]) + ); + } + + + sub _encode_surrogates { # from perlunicode + my $uni = $_[0] - 0x10000; + return ($uni / 0x400 + 0xD800, $uni % 0x400 + 0xDC00); + } + + + sub _is_bignum { + $_[0]->isa('Math::BigInt') or $_[0]->isa('Math::BigFloat'); + } + + + + # + # JSON => Perl + # + + my $max_intsize; + + BEGIN { + my $checkint = 1111; + for my $d (5..64) { + $checkint .= 1; + my $int = eval qq| $checkint |; + if ($int =~ /[eE]/) { + $max_intsize = $d - 1; + last; + } + } + } + + { # PARSE + + my %escapes = ( # by Jeremy Muhlich <jmuhlich [at] bitflood.org> + b => "\x8", + t => "\x9", + n => "\xA", + f => "\xC", + r => "\xD", + '\\' => '\\', + '"' => '"', + '/' => '/', + ); + + my $text; # json data + my $at; # offset + my $ch; # 1chracter + my $len; # text length (changed according to UTF8 or NON UTF8) + # INTERNAL + my $depth; # nest counter + my $encoding; # json text encoding + my $is_valid_utf8; # temp variable + my $utf8_len; # utf8 byte length + # FLAGS + my $utf8; # must be utf8 + my $max_depth; # max nest nubmer of objects and arrays + my $max_size; + my $relaxed; + my $cb_object; + my $cb_sk_object; + + my $F_HOOK; + + my $allow_bigint; # using Math::BigInt + my $singlequote; # loosely quoting + my $loose; # + my $allow_barekey; # bareKey + + # $opt flag + # 0x00000001 .... decode_prefix + # 0x10000000 .... incr_parse + + sub PP_decode_json { + my ($self, $opt); # $opt is an effective flag during this decode_json. + + ($self, $text, $opt) = @_; + + ($at, $ch, $depth) = (0, '', 0); + + if ( !defined $text or ref $text ) { + decode_error("malformed JSON string, neither array, object, number, string or atom"); + } + + my $idx = $self->{PROPS}; + + ($utf8, $relaxed, $loose, $allow_bigint, $allow_barekey, $singlequote) + = @{$idx}[P_UTF8, P_RELAXED, P_LOOSE .. P_ALLOW_SINGLEQUOTE]; + + if ( $utf8 ) { + utf8::downgrade( $text, 1 ) or Carp::croak("Wide character in subroutine entry"); + } + else { + utf8::upgrade( $text ); + } + + $len = length $text; + + ($max_depth, $max_size, $cb_object, $cb_sk_object, $F_HOOK) + = @{$self}{qw/max_depth max_size cb_object cb_sk_object F_HOOK/}; + + if ($max_size > 1) { + use bytes; + my $bytes = length $text; + decode_error( + sprintf("attempted decode of JSON text of %s bytes size, but max_size is set to %s" + , $bytes, $max_size), 1 + ) if ($bytes > $max_size); + } + + # Currently no effect + # should use regexp + my @octets = unpack('C4', $text); + $encoding = ( $octets[0] and $octets[1]) ? 'UTF-8' + : (!$octets[0] and $octets[1]) ? 'UTF-16BE' + : (!$octets[0] and !$octets[1]) ? 'UTF-32BE' + : ( $octets[2] ) ? 'UTF-16LE' + : (!$octets[2] ) ? 'UTF-32LE' + : 'unknown'; + + white(); # remove head white space + + my $valid_start = defined $ch; # Is there a first character for JSON structure? + + my $result = value(); + + return undef if ( !$result && ( $opt & 0x10000000 ) ); # for incr_parse + + decode_error("malformed JSON string, neither array, object, number, string or atom") unless $valid_start; + + if ( !$idx->[ P_ALLOW_NONREF ] and !ref $result ) { + decode_error( + 'JSON text must be an object or array (but found number, string, true, false or null,' + . ' use allow_nonref to allow this)', 1); + } + + Carp::croak('something wrong.') if $len < $at; # we won't arrive here. + + my $consumed = defined $ch ? $at - 1 : $at; # consumed JSON text length + + white(); # remove tail white space + + if ( $ch ) { + return ( $result, $consumed ) if ($opt & 0x00000001); # all right if decode_prefix + decode_error("garbage after JSON object"); + } + + ( $opt & 0x00000001 ) ? ( $result, $consumed ) : $result; + } + + + sub next_chr { + return $ch = undef if($at >= $len); + $ch = substr($text, $at++, 1); + } + + + sub value { + white(); + return if(!defined $ch); + return object() if($ch eq '{'); + return array() if($ch eq '['); + return string() if($ch eq '"' or ($singlequote and $ch eq "'")); + return number() if($ch =~ /[0-9]/ or $ch eq '-'); + return word(); + } + + sub string { + my ($i, $s, $t, $u); + my $utf16; + my $is_utf8; + + ($is_valid_utf8, $utf8_len) = ('', 0); + + $s = ''; # basically UTF8 flag on + + if($ch eq '"' or ($singlequote and $ch eq "'")){ + my $boundChar = $ch; + + OUTER: while( defined(next_chr()) ){ + + if($ch eq $boundChar){ + next_chr(); + + if ($utf16) { + decode_error("missing low surrogate character in surrogate pair"); + } + + utf8::decode($s) if($is_utf8); + + return $s; + } + elsif($ch eq '\\'){ + next_chr(); + if(exists $escapes{$ch}){ + $s .= $escapes{$ch}; + } + elsif($ch eq 'u'){ # UNICODE handling + my $u = ''; + + for(1..4){ + $ch = next_chr(); + last OUTER if($ch !~ /[0-9a-fA-F]/); + $u .= $ch; + } + + # U+D800 - U+DBFF + if ($u =~ /^[dD][89abAB][0-9a-fA-F]{2}/) { # UTF-16 high surrogate? + $utf16 = $u; + } + # U+DC00 - U+DFFF + elsif ($u =~ /^[dD][c-fC-F][0-9a-fA-F]{2}/) { # UTF-16 low surrogate? + unless (defined $utf16) { + decode_error("missing high surrogate character in surrogate pair"); + } + $is_utf8 = 1; + $s .= JSON_PP_decode_surrogates($utf16, $u) || next; + $utf16 = undef; + } + else { + if (defined $utf16) { + decode_error("surrogate pair expected"); + } + + if ( ( my $hex = hex( $u ) ) > 127 ) { + $is_utf8 = 1; + $s .= JSON_PP_decode_unicode($u) || next; + } + else { + $s .= chr $hex; + } + } + + } + else{ + unless ($loose) { + $at -= 2; + decode_error('illegal backslash escape sequence in string'); + } + $s .= $ch; + } + } + else{ + + if ( ord $ch > 127 ) { + if ( $utf8 ) { + unless( $ch = is_valid_utf8($ch) ) { + $at -= 1; + decode_error("malformed UTF-8 character in JSON string"); + } + else { + $at += $utf8_len - 1; + } + } + else { + utf8::encode( $ch ); + } + + $is_utf8 = 1; + } + + if (!$loose) { + if ($ch =~ /[\x00-\x1f\x22\x5c]/) { # '/' ok + $at--; + decode_error('invalid character encountered while parsing JSON string'); + } + } + + $s .= $ch; + } + } + } + + decode_error("unexpected end of string while parsing JSON string"); + } + + + sub white { + while( defined $ch ){ + if($ch le ' '){ + next_chr(); + } + elsif($ch eq '/'){ + next_chr(); + if(defined $ch and $ch eq '/'){ + 1 while(defined(next_chr()) and $ch ne "\n" and $ch ne "\r"); + } + elsif(defined $ch and $ch eq '*'){ + next_chr(); + while(1){ + if(defined $ch){ + if($ch eq '*'){ + if(defined(next_chr()) and $ch eq '/'){ + next_chr(); + last; + } + } + else{ + next_chr(); + } + } + else{ + decode_error("Unterminated comment"); + } + } + next; + } + else{ + $at--; + decode_error("malformed JSON string, neither array, object, number, string or atom"); + } + } + else{ + if ($relaxed and $ch eq '#') { # correctly? + pos($text) = $at; + $text =~ /\G([^\n]*(?:\r\n|\r|\n|$))/g; + $at = pos($text); + next_chr; + next; + } + + last; + } + } + } + + + sub array { + my $a = $_[0] || []; # you can use this code to use another array ref object. + + decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)') + if (++$depth > $max_depth); + + next_chr(); + white(); + + if(defined $ch and $ch eq ']'){ + --$depth; + next_chr(); + return $a; + } + else { + while(defined($ch)){ + push @$a, value(); + + white(); + + if (!defined $ch) { + last; + } + + if($ch eq ']'){ + --$depth; + next_chr(); + return $a; + } + + if($ch ne ','){ + last; + } + + next_chr(); + white(); + + if ($relaxed and $ch eq ']') { + --$depth; + next_chr(); + return $a; + } + + } + } + + decode_error(", or ] expected while parsing array"); + } + + + sub object { + my $o = $_[0] || {}; # you can use this code to use another hash ref object. + my $k; + + decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)') + if (++$depth > $max_depth); + next_chr(); + white(); + + if(defined $ch and $ch eq '}'){ + --$depth; + next_chr(); + if ($F_HOOK) { + return _json_object_hook($o); + } + return $o; + } + else { + while (defined $ch) { + $k = ($allow_barekey and $ch ne '"' and $ch ne "'") ? bareKey() : string(); + white(); + + if(!defined $ch or $ch ne ':'){ + $at--; + decode_error("':' expected"); + } + + next_chr(); + $o->{$k} = value(); + white(); + + last if (!defined $ch); + + if($ch eq '}'){ + --$depth; + next_chr(); + if ($F_HOOK) { + return _json_object_hook($o); + } + return $o; + } + + if($ch ne ','){ + last; + } + + next_chr(); + white(); + + if ($relaxed and $ch eq '}') { + --$depth; + next_chr(); + if ($F_HOOK) { + return _json_object_hook($o); + } + return $o; + } + + } + + } + + $at--; + decode_error(", or } expected while parsing object/hash"); + } + + + sub bareKey { # doesn't strictly follow Standard ECMA-262 3rd Edition + my $key; + while($ch =~ /[^\x00-\x23\x25-\x2F\x3A-\x40\x5B-\x5E\x60\x7B-\x7F]/){ + $key .= $ch; + next_chr(); + } + return $key; + } + + + sub word { + my $word = substr($text,$at-1,4); + + if($word eq 'true'){ + $at += 3; + next_chr; + return $JSON::PP::true; + } + elsif($word eq 'null'){ + $at += 3; + next_chr; + return undef; + } + elsif($word eq 'fals'){ + $at += 3; + if(substr($text,$at,1) eq 'e'){ + $at++; + next_chr; + return $JSON::PP::false; + } + } + + $at--; # for decode_error report + + decode_error("'null' expected") if ($word =~ /^n/); + decode_error("'true' expected") if ($word =~ /^t/); + decode_error("'false' expected") if ($word =~ /^f/); + decode_error("malformed JSON string, neither array, object, number, string or atom"); + } + + + sub number { + my $n = ''; + my $v; + + # According to RFC4627, hex or oct digts are invalid. + if($ch eq '0'){ + my $peek = substr($text,$at,1); + my $hex = $peek =~ /[xX]/; # 0 or 1 + + if($hex){ + decode_error("malformed number (leading zero must not be followed by another digit)"); + ($n) = ( substr($text, $at+1) =~ /^([0-9a-fA-F]+)/); + } + else{ # oct + ($n) = ( substr($text, $at) =~ /^([0-7]+)/); + if (defined $n and length $n > 1) { + decode_error("malformed number (leading zero must not be followed by another digit)"); + } + } + + if(defined $n and length($n)){ + if (!$hex and length($n) == 1) { + decode_error("malformed number (leading zero must not be followed by another digit)"); + } + $at += length($n) + $hex; + next_chr; + return $hex ? hex($n) : oct($n); + } + } + + if($ch eq '-'){ + $n = '-'; + next_chr; + if (!defined $ch or $ch !~ /\d/) { + decode_error("malformed number (no digits after initial minus)"); + } + } + + while(defined $ch and $ch =~ /\d/){ + $n .= $ch; + next_chr; + } + + if(defined $ch and $ch eq '.'){ + $n .= '.'; + + next_chr; + if (!defined $ch or $ch !~ /\d/) { + decode_error("malformed number (no digits after decimal point)"); + } + else { + $n .= $ch; + } + + while(defined(next_chr) and $ch =~ /\d/){ + $n .= $ch; + } + } + + if(defined $ch and ($ch eq 'e' or $ch eq 'E')){ + $n .= $ch; + next_chr; + + if(defined($ch) and ($ch eq '+' or $ch eq '-')){ + $n .= $ch; + next_chr; + if (!defined $ch or $ch =~ /\D/) { + decode_error("malformed number (no digits after exp sign)"); + } + $n .= $ch; + } + elsif(defined($ch) and $ch =~ /\d/){ + $n .= $ch; + } + else { + decode_error("malformed number (no digits after exp sign)"); + } + + while(defined(next_chr) and $ch =~ /\d/){ + $n .= $ch; + } + + } + + $v .= $n; + + if ($v !~ /[.eE]/ and length $v > $max_intsize) { + if ($allow_bigint) { # from Adam Sussman + require Math::BigInt; + return Math::BigInt->new($v); + } + else { + return "$v"; + } + } + elsif ($allow_bigint) { + require Math::BigFloat; + return Math::BigFloat->new($v); + } + + return 0+$v; + } + + + sub is_valid_utf8 { + + $utf8_len = $_[0] =~ /[\x00-\x7F]/ ? 1 + : $_[0] =~ /[\xC2-\xDF]/ ? 2 + : $_[0] =~ /[\xE0-\xEF]/ ? 3 + : $_[0] =~ /[\xF0-\xF4]/ ? 4 + : 0 + ; + + return unless $utf8_len; + + my $is_valid_utf8 = substr($text, $at - 1, $utf8_len); + + return ( $is_valid_utf8 =~ /^(?: + [\x00-\x7F] + |[\xC2-\xDF][\x80-\xBF] + |[\xE0][\xA0-\xBF][\x80-\xBF] + |[\xE1-\xEC][\x80-\xBF][\x80-\xBF] + |[\xED][\x80-\x9F][\x80-\xBF] + |[\xEE-\xEF][\x80-\xBF][\x80-\xBF] + |[\xF0][\x90-\xBF][\x80-\xBF][\x80-\xBF] + |[\xF1-\xF3][\x80-\xBF][\x80-\xBF][\x80-\xBF] + |[\xF4][\x80-\x8F][\x80-\xBF][\x80-\xBF] + )$/x ) ? $is_valid_utf8 : ''; + } + + + sub decode_error { + my $error = shift; + my $no_rep = shift; + my $str = defined $text ? substr($text, $at) : ''; + my $mess = ''; + my $type = $] >= 5.008 ? 'U*' + : $] < 5.006 ? 'C*' + : utf8::is_utf8( $str ) ? 'U*' # 5.6 + : 'C*' + ; + + for my $c ( unpack( $type, $str ) ) { # emulate pv_uni_display() ? + $mess .= $c == 0x07 ? '\a' + : $c == 0x09 ? '\t' + : $c == 0x0a ? '\n' + : $c == 0x0d ? '\r' + : $c == 0x0c ? '\f' + : $c < 0x20 ? sprintf('\x{%x}', $c) + : $c == 0x5c ? '\\\\' + : $c < 0x80 ? chr($c) + : sprintf('\x{%x}', $c) + ; + if ( length $mess >= 20 ) { + $mess .= '...'; + last; + } + } + + unless ( length $mess ) { + $mess = '(end of string)'; + } + + Carp::croak ( + $no_rep ? "$error" : "$error, at character offset $at (before \"$mess\")" + ); + + } + + + sub _json_object_hook { + my $o = $_[0]; + my @ks = keys %{$o}; + + if ( $cb_sk_object and @ks == 1 and exists $cb_sk_object->{ $ks[0] } and ref $cb_sk_object->{ $ks[0] } ) { + my @val = $cb_sk_object->{ $ks[0] }->( $o->{$ks[0]} ); + if (@val == 1) { + return $val[0]; + } + } + + my @val = $cb_object->($o) if ($cb_object); + if (@val == 0 or @val > 1) { + return $o; + } + else { + return $val[0]; + } + } + + + sub PP_decode_box { + { + text => $text, + at => $at, + ch => $ch, + len => $len, + depth => $depth, + encoding => $encoding, + is_valid_utf8 => $is_valid_utf8, + }; + } + + } # PARSE + + + sub _decode_surrogates { # from perlunicode + my $uni = 0x10000 + (hex($_[0]) - 0xD800) * 0x400 + (hex($_[1]) - 0xDC00); + my $un = pack('U*', $uni); + utf8::encode( $un ); + return $un; + } + + + sub _decode_unicode { + my $un = pack('U', hex shift); + utf8::encode( $un ); + return $un; + } + + # + # Setup for various Perl versions (the code from JSON::PP58) + # + + BEGIN { + + unless ( defined &utf8::is_utf8 ) { + require Encode; + *utf8::is_utf8 = *Encode::is_utf8; + } + + if ( $] >= 5.008 ) { + *JSON::PP::JSON_PP_encode_ascii = \&_encode_ascii; + *JSON::PP::JSON_PP_encode_latin1 = \&_encode_latin1; + *JSON::PP::JSON_PP_decode_surrogates = \&_decode_surrogates; + *JSON::PP::JSON_PP_decode_unicode = \&_decode_unicode; + } + + if ($] >= 5.008 and $] < 5.008003) { # join() in 5.8.0 - 5.8.2 is broken. + package JSON::PP; + require subs; + subs->import('join'); + eval q| + sub join { + return '' if (@_ < 2); + my $j = shift; + my $str = shift; + for (@_) { $str .= $j . $_; } + return $str; + } + |; + } + + + sub JSON::PP::incr_parse { + local $Carp::CarpLevel = 1; + ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_parse( @_ ); + } + + + sub JSON::PP::incr_skip { + ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_skip; + } + + + sub JSON::PP::incr_reset { + ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_reset; + } + + eval q{ + sub JSON::PP::incr_text : lvalue { + $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new; + + if ( $_[0]->{_incr_parser}->{incr_parsing} ) { + Carp::croak("incr_text can not be called when the incremental parser already started parsing"); + } + $_[0]->{_incr_parser}->{incr_text}; + } + } if ( $] >= 5.006 ); + + } # Setup for various Perl versions (the code from JSON::PP58) + + + ############################### + # Utilities + # + + BEGIN { + eval 'require Scalar::Util'; + unless($@){ + *JSON::PP::blessed = \&Scalar::Util::blessed; + *JSON::PP::reftype = \&Scalar::Util::reftype; + *JSON::PP::refaddr = \&Scalar::Util::refaddr; + } + else{ # This code is from Sclar::Util. + # warn $@; + eval 'sub UNIVERSAL::a_sub_not_likely_to_be_here { ref($_[0]) }'; + *JSON::PP::blessed = sub { + local($@, $SIG{__DIE__}, $SIG{__WARN__}); + ref($_[0]) ? eval { $_[0]->a_sub_not_likely_to_be_here } : undef; + }; + my %tmap = qw( + B::NULL SCALAR + B::HV HASH + B::AV ARRAY + B::CV CODE + B::IO IO + B::GV GLOB + B::REGEXP REGEXP + ); + *JSON::PP::reftype = sub { + my $r = shift; + + return undef unless length(ref($r)); + + my $t = ref(B::svref_2object($r)); + + return + exists $tmap{$t} ? $tmap{$t} + : length(ref($$r)) ? 'REF' + : 'SCALAR'; + }; + *JSON::PP::refaddr = sub { + return undef unless length(ref($_[0])); + + my $addr; + if(defined(my $pkg = blessed($_[0]))) { + $addr .= bless $_[0], 'Scalar::Util::Fake'; + bless $_[0], $pkg; + } + else { + $addr .= $_[0] + } + + $addr =~ /0x(\w+)/; + local $^W; + #no warnings 'portable'; + hex($1); + } + } + } + + + # shamely copied and modified from JSON::XS code. + + $JSON::PP::true = do { bless \(my $dummy = 1), "JSON::PP::Boolean" }; + $JSON::PP::false = do { bless \(my $dummy = 0), "JSON::PP::Boolean" }; + + sub is_bool { defined $_[0] and UNIVERSAL::isa($_[0], "JSON::PP::Boolean"); } + + sub true { $JSON::PP::true } + sub false { $JSON::PP::false } + sub null { undef; } + + ############################### + + package JSON::PP::Boolean; + + use overload ( + "0+" => sub { ${$_[0]} }, + "++" => sub { $_[0] = ${$_[0]} + 1 }, + "--" => sub { $_[0] = ${$_[0]} - 1 }, + fallback => 1, + ); + + + ############################### + + package JSON::PP::IncrParser; + + use strict; + + use constant INCR_M_WS => 0; # initial whitespace skipping + use constant INCR_M_STR => 1; # inside string + use constant INCR_M_BS => 2; # inside backslash + use constant INCR_M_JSON => 3; # outside anything, count nesting + use constant INCR_M_C0 => 4; + use constant INCR_M_C1 => 5; + + $JSON::PP::IncrParser::VERSION = '1.01'; + + my $unpack_format = $] < 5.006 ? 'C*' : 'U*'; + + sub new { + my ( $class ) = @_; + + bless { + incr_nest => 0, + incr_text => undef, + incr_parsing => 0, + incr_p => 0, + }, $class; + } + + + sub incr_parse { + my ( $self, $coder, $text ) = @_; + + $self->{incr_text} = '' unless ( defined $self->{incr_text} ); + + if ( defined $text ) { + if ( utf8::is_utf8( $text ) and !utf8::is_utf8( $self->{incr_text} ) ) { + utf8::upgrade( $self->{incr_text} ) ; + utf8::decode( $self->{incr_text} ) ; + } + $self->{incr_text} .= $text; + } + + + my $max_size = $coder->get_max_size; + + if ( defined wantarray ) { + + $self->{incr_mode} = INCR_M_WS unless defined $self->{incr_mode}; + + if ( wantarray ) { + my @ret; + + $self->{incr_parsing} = 1; + + do { + push @ret, $self->_incr_parse( $coder, $self->{incr_text} ); + + unless ( !$self->{incr_nest} and $self->{incr_mode} == INCR_M_JSON ) { + $self->{incr_mode} = INCR_M_WS if $self->{incr_mode} != INCR_M_STR; + } + + } until ( length $self->{incr_text} >= $self->{incr_p} ); + + $self->{incr_parsing} = 0; + + return @ret; + } + else { # in scalar context + $self->{incr_parsing} = 1; + my $obj = $self->_incr_parse( $coder, $self->{incr_text} ); + $self->{incr_parsing} = 0 if defined $obj; # pointed by Martin J. Evans + return $obj ? $obj : undef; # $obj is an empty string, parsing was completed. + } + + } + + } + + + sub _incr_parse { + my ( $self, $coder, $text, $skip ) = @_; + my $p = $self->{incr_p}; + my $restore = $p; + + my @obj; + my $len = length $text; + + if ( $self->{incr_mode} == INCR_M_WS ) { + while ( $len > $p ) { + my $s = substr( $text, $p, 1 ); + $p++ and next if ( 0x20 >= unpack($unpack_format, $s) ); + $self->{incr_mode} = INCR_M_JSON; + last; + } + } + + while ( $len > $p ) { + my $s = substr( $text, $p++, 1 ); + + if ( $s eq '"' ) { + if (substr( $text, $p - 2, 1 ) eq '\\' ) { + next; + } + + if ( $self->{incr_mode} != INCR_M_STR ) { + $self->{incr_mode} = INCR_M_STR; + } + else { + $self->{incr_mode} = INCR_M_JSON; + unless ( $self->{incr_nest} ) { + last; + } + } + } + + if ( $self->{incr_mode} == INCR_M_JSON ) { + + if ( $s eq '[' or $s eq '{' ) { + if ( ++$self->{incr_nest} > $coder->get_max_depth ) { + Carp::croak('json text or perl structure exceeds maximum nesting level (max_depth set too low?)'); + } + } + elsif ( $s eq ']' or $s eq '}' ) { + last if ( --$self->{incr_nest} <= 0 ); + } + elsif ( $s eq '#' ) { + while ( $len > $p ) { + last if substr( $text, $p++, 1 ) eq "\n"; + } + } + + } + + } + + $self->{incr_p} = $p; + + return if ( $self->{incr_mode} == INCR_M_STR and not $self->{incr_nest} ); + return if ( $self->{incr_mode} == INCR_M_JSON and $self->{incr_nest} > 0 ); + + return '' unless ( length substr( $self->{incr_text}, 0, $p ) ); + + local $Carp::CarpLevel = 2; + + $self->{incr_p} = $restore; + $self->{incr_c} = $p; + + my ( $obj, $tail ) = $coder->PP_decode_json( substr( $self->{incr_text}, 0, $p ), 0x10000001 ); + + $self->{incr_text} = substr( $self->{incr_text}, $p ); + $self->{incr_p} = 0; + + return $obj or ''; + } + + + sub incr_text { + if ( $_[0]->{incr_parsing} ) { + Carp::croak("incr_text can not be called when the incremental parser already started parsing"); + } + $_[0]->{incr_text}; + } + + + sub incr_skip { + my $self = shift; + $self->{incr_text} = substr( $self->{incr_text}, $self->{incr_c} ); + $self->{incr_p} = 0; + } + + + sub incr_reset { + my $self = shift; + $self->{incr_text} = undef; + $self->{incr_p} = 0; + $self->{incr_mode} = 0; + $self->{incr_nest} = 0; + $self->{incr_parsing} = 0; + } + + ############################### + + + 1; + __END__ + =pod + +JSON_PP + +$fatpacked{"JSON/PP/Boolean.pm"} = <<'JSON_PP_BOOLEAN'; + use JSON::PP (); + use strict; + + 1; + +JSON_PP_BOOLEAN + +$fatpacked{"Module/Metadata.pm"} = <<'MODULE_METADATA'; + # -*- mode: cperl; tab-width: 8; indent-tabs-mode: nil; basic-offset: 2 -*- + # vim:ts=8:sw=2:et:sta:sts=2 + package Module::Metadata; + + # Adapted from Perl-licensed code originally distributed with + # Module-Build by Ken Williams + + # This module provides routines to gather information about + # perl modules (assuming this may be expanded in the distant + # parrot future to look at other types of modules). + + use strict; + use vars qw($VERSION); + $VERSION = '1.000007'; + $VERSION = eval $VERSION; + + use File::Spec; + use IO::File; + use version 0.87; + BEGIN { + if ($INC{'Log/Contextual.pm'}) { + Log::Contextual->import('log_info'); + } else { + *log_info = sub (&) { warn $_[0]->() }; + } + } + use File::Find qw(find); + + my $V_NUM_REGEXP = qr{v?[0-9._]+}; # crudely, a v-string or decimal + + my $PKG_REGEXP = qr{ # match a package declaration + ^[\s\{;]* # intro chars on a line + package # the word 'package' + \s+ # whitespace + ([\w:]+) # a package name + \s* # optional whitespace + ($V_NUM_REGEXP)? # optional version number + \s* # optional whitesapce + [;\{] # semicolon line terminator or block start (since 5.16) + }x; + + my $VARNAME_REGEXP = qr{ # match fully-qualified VERSION name + ([\$*]) # sigil - $ or * + ( + ( # optional leading package name + (?:::|\')? # possibly starting like just :: (Ì la $::VERSION) + (?:\w+(?:::|\'))* # Foo::Bar:: ... + )? + VERSION + )\b + }x; + + my $VERS_REGEXP = qr{ # match a VERSION definition + (?: + \(\s*$VARNAME_REGEXP\s*\) # with parens + | + $VARNAME_REGEXP # without parens + ) + \s* + =[^=~] # = but not ==, nor =~ + }x; + + + sub new_from_file { + my $class = shift; + my $filename = File::Spec->rel2abs( shift ); + + return undef unless defined( $filename ) && -f $filename; + return $class->_init(undef, $filename, @_); + } + + sub new_from_handle { + my $class = shift; + my $handle = shift; + my $filename = shift; + return undef unless defined($handle) && defined($filename); + $filename = File::Spec->rel2abs( $filename ); + + return $class->_init(undef, $filename, @_, handle => $handle); + + } + + + sub new_from_module { + my $class = shift; + my $module = shift; + my %props = @_; + + $props{inc} ||= \@INC; + my $filename = $class->find_module_by_name( $module, $props{inc} ); + return undef unless defined( $filename ) && -f $filename; + return $class->_init($module, $filename, %props); + } + + { + + my $compare_versions = sub { + my ($v1, $op, $v2) = @_; + $v1 = version->new($v1) + unless UNIVERSAL::isa($v1,'version'); + + my $eval_str = "\$v1 $op \$v2"; + my $result = eval $eval_str; + log_info { "error comparing versions: '$eval_str' $@" } if $@; + + return $result; + }; + + my $normalize_version = sub { + my ($version) = @_; + if ( $version =~ /[=<>!,]/ ) { # logic, not just version + # take as is without modification + } + elsif ( ref $version eq 'version' ) { # version objects + $version = $version->is_qv ? $version->normal : $version->stringify; + } + elsif ( $version =~ /^[^v][^.]*\.[^.]+\./ ) { # no leading v, multiple dots + # normalize string tuples without "v": "1.2.3" -> "v1.2.3" + $version = "v$version"; + } + else { + # leave alone + } + return $version; + }; + + # separate out some of the conflict resolution logic + + my $resolve_module_versions = sub { + my $packages = shift; + + my( $file, $version ); + my $err = ''; + foreach my $p ( @$packages ) { + if ( defined( $p->{version} ) ) { + if ( defined( $version ) ) { + if ( $compare_versions->( $version, '!=', $p->{version} ) ) { + $err .= " $p->{file} ($p->{version})\n"; + } else { + # same version declared multiple times, ignore + } + } else { + $file = $p->{file}; + $version = $p->{version}; + } + } + $file ||= $p->{file} if defined( $p->{file} ); + } + + if ( $err ) { + $err = " $file ($version)\n" . $err; + } + + my %result = ( + file => $file, + version => $version, + err => $err + ); + + return \%result; + }; + + sub package_versions_from_directory { + my ( $class, $dir, $files ) = @_; + + my @files; + + if ( $files ) { + @files = @$files; + } else { + find( { + wanted => sub { + push @files, $_ if -f $_ && /\.pm$/; + }, + no_chdir => 1, + }, $dir ); + } + + # First, we enumerate all packages & versions, + # separating into primary & alternative candidates + my( %prime, %alt ); + foreach my $file (@files) { + my $mapped_filename = File::Spec->abs2rel( $file, $dir ); + my @path = split( /\//, $mapped_filename ); + (my $prime_package = join( '::', @path )) =~ s/\.pm$//; + + my $pm_info = $class->new_from_file( $file ); + + foreach my $package ( $pm_info->packages_inside ) { + next if $package eq 'main'; # main can appear numerous times, ignore + next if $package eq 'DB'; # special debugging package, ignore + next if grep /^_/, split( /::/, $package ); # private package, ignore + + my $version = $pm_info->version( $package ); + + if ( $package eq $prime_package ) { + if ( exists( $prime{$package} ) ) { + die "Unexpected conflict in '$package'; multiple versions found.\n"; + } else { + $prime{$package}{file} = $mapped_filename; + $prime{$package}{version} = $version if defined( $version ); + } + } else { + push( @{$alt{$package}}, { + file => $mapped_filename, + version => $version, + } ); + } + } + } + + # Then we iterate over all the packages found above, identifying conflicts + # and selecting the "best" candidate for recording the file & version + # for each package. + foreach my $package ( keys( %alt ) ) { + my $result = $resolve_module_versions->( $alt{$package} ); + + if ( exists( $prime{$package} ) ) { # primary package selected + + if ( $result->{err} ) { + # Use the selected primary package, but there are conflicting + # errors among multiple alternative packages that need to be + # reported + log_info { + "Found conflicting versions for package '$package'\n" . + " $prime{$package}{file} ($prime{$package}{version})\n" . + $result->{err} + }; + + } elsif ( defined( $result->{version} ) ) { + # There is a primary package selected, and exactly one + # alternative package + + if ( exists( $prime{$package}{version} ) && + defined( $prime{$package}{version} ) ) { + # Unless the version of the primary package agrees with the + # version of the alternative package, report a conflict + if ( $compare_versions->( + $prime{$package}{version}, '!=', $result->{version} + ) + ) { + + log_info { + "Found conflicting versions for package '$package'\n" . + " $prime{$package}{file} ($prime{$package}{version})\n" . + " $result->{file} ($result->{version})\n" + }; + } + + } else { + # The prime package selected has no version so, we choose to + # use any alternative package that does have a version + $prime{$package}{file} = $result->{file}; + $prime{$package}{version} = $result->{version}; + } + + } else { + # no alt package found with a version, but we have a prime + # package so we use it whether it has a version or not + } + + } else { # No primary package was selected, use the best alternative + + if ( $result->{err} ) { + log_info { + "Found conflicting versions for package '$package'\n" . + $result->{err} + }; + } + + # Despite possible conflicting versions, we choose to record + # something rather than nothing + $prime{$package}{file} = $result->{file}; + $prime{$package}{version} = $result->{version} + if defined( $result->{version} ); + } + } + + # Normalize versions. Can't use exists() here because of bug in YAML::Node. + # XXX "bug in YAML::Node" comment seems irrelvant -- dagolden, 2009-05-18 + for (grep defined $_->{version}, values %prime) { + $_->{version} = $normalize_version->( $_->{version} ); + } + + return \%prime; + } + } + + + sub _init { + my $class = shift; + my $module = shift; + my $filename = shift; + my %props = @_; + + my $handle = delete $props{handle}; + my( %valid_props, @valid_props ); + @valid_props = qw( collect_pod inc ); + @valid_props{@valid_props} = delete( @props{@valid_props} ); + warn "Unknown properties: @{[keys %props]}\n" if scalar( %props ); + + my %data = ( + module => $module, + filename => $filename, + version => undef, + packages => [], + versions => {}, + pod => {}, + pod_headings => [], + collect_pod => 0, + + %valid_props, + ); + + my $self = bless(\%data, $class); + + if ( $handle ) { + $self->_parse_fh($handle); + } + else { + $self->_parse_file(); + } + + unless($self->{module} and length($self->{module})) { + my ($v, $d, $f) = File::Spec->splitpath($self->{filename}); + if($f =~ /\.pm$/) { + $f =~ s/\..+$//; + my @candidates = grep /$f$/, @{$self->{packages}}; + $self->{module} = shift(@candidates); # punt + } + else { + if(grep /main/, @{$self->{packages}}) { + $self->{module} = 'main'; + } + else { + $self->{module} = $self->{packages}[0] || ''; + } + } + } + + $self->{version} = $self->{versions}{$self->{module}} + if defined( $self->{module} ); + + return $self; + } + + # class method + sub _do_find_module { + my $class = shift; + my $module = shift || die 'find_module_by_name() requires a package name'; + my $dirs = shift || \@INC; + + my $file = File::Spec->catfile(split( /::/, $module)); + foreach my $dir ( @$dirs ) { + my $testfile = File::Spec->catfile($dir, $file); + return [ File::Spec->rel2abs( $testfile ), $dir ] + if -e $testfile and !-d _; # For stuff like ExtUtils::xsubpp + return [ File::Spec->rel2abs( "$testfile.pm" ), $dir ] + if -e "$testfile.pm"; + } + return; + } + + # class method + sub find_module_by_name { + my $found = shift()->_do_find_module(@_) or return; + return $found->[0]; + } + + # class method + sub find_module_dir_by_name { + my $found = shift()->_do_find_module(@_) or return; + return $found->[1]; + } + + + # given a line of perl code, attempt to parse it if it looks like a + # $VERSION assignment, returning sigil, full name, & package name + sub _parse_version_expression { + my $self = shift; + my $line = shift; + + my( $sig, $var, $pkg ); + if ( $line =~ $VERS_REGEXP ) { + ( $sig, $var, $pkg ) = $2 ? ( $1, $2, $3 ) : ( $4, $5, $6 ); + if ( $pkg ) { + $pkg = ($pkg eq '::') ? 'main' : $pkg; + $pkg =~ s/::$//; + } + } + + return ( $sig, $var, $pkg ); + } + + sub _parse_file { + my $self = shift; + + my $filename = $self->{filename}; + my $fh = IO::File->new( $filename ) + or die( "Can't open '$filename': $!" ); + + $self->_parse_fh($fh); + } + + sub _parse_fh { + my ($self, $fh) = @_; + + my( $in_pod, $seen_end, $need_vers ) = ( 0, 0, 0 ); + my( @pkgs, %vers, %pod, @pod ); + my $pkg = 'main'; + my $pod_sect = ''; + my $pod_data = ''; + + while (defined( my $line = <$fh> )) { + my $line_num = $.; + + chomp( $line ); + next if $line =~ /^\s*#/; + + $in_pod = ($line =~ /^=(?!cut)/) ? 1 : ($line =~ /^=cut/) ? 0 : $in_pod; + + # Would be nice if we could also check $in_string or something too + last if !$in_pod && $line =~ /^__(?:DATA|END)__$/; + + if ( $in_pod || $line =~ /^=cut/ ) { + + if ( $line =~ /^=head\d\s+(.+)\s*$/ ) { + push( @pod, $1 ); + if ( $self->{collect_pod} && length( $pod_data ) ) { + $pod{$pod_sect} = $pod_data; + $pod_data = ''; + } + $pod_sect = $1; + + + } elsif ( $self->{collect_pod} ) { + $pod_data .= "$line\n"; + + } + + } else { + + $pod_sect = ''; + $pod_data = ''; + + # parse $line to see if it's a $VERSION declaration + my( $vers_sig, $vers_fullname, $vers_pkg ) = + $self->_parse_version_expression( $line ); + + if ( $line =~ $PKG_REGEXP ) { + $pkg = $1; + push( @pkgs, $pkg ) unless grep( $pkg eq $_, @pkgs ); + $vers{$pkg} = (defined $2 ? $2 : undef) unless exists( $vers{$pkg} ); + $need_vers = defined $2 ? 0 : 1; + + # VERSION defined with full package spec, i.e. $Module::VERSION + } elsif ( $vers_fullname && $vers_pkg ) { + push( @pkgs, $vers_pkg ) unless grep( $vers_pkg eq $_, @pkgs ); + $need_vers = 0 if $vers_pkg eq $pkg; + + unless ( defined $vers{$vers_pkg} && length $vers{$vers_pkg} ) { + $vers{$vers_pkg} = + $self->_evaluate_version_line( $vers_sig, $vers_fullname, $line ); + } else { + # Warn unless the user is using the "$VERSION = eval + # $VERSION" idiom (though there are probably other idioms + # that we should watch out for...) + warn <<"EOM" unless $line =~ /=\s*eval/; + Package '$vers_pkg' already declared with version '$vers{$vers_pkg}', + ignoring subsequent declaration on line $line_num. + EOM + } + + # first non-comment line in undeclared package main is VERSION + } elsif ( !exists($vers{main}) && $pkg eq 'main' && $vers_fullname ) { + $need_vers = 0; + my $v = + $self->_evaluate_version_line( $vers_sig, $vers_fullname, $line ); + $vers{$pkg} = $v; + push( @pkgs, 'main' ); + + # first non-comment line in undeclared package defines package main + } elsif ( !exists($vers{main}) && $pkg eq 'main' && $line =~ /\w+/ ) { + $need_vers = 1; + $vers{main} = ''; + push( @pkgs, 'main' ); + + # only keep if this is the first $VERSION seen + } elsif ( $vers_fullname && $need_vers ) { + $need_vers = 0; + my $v = + $self->_evaluate_version_line( $vers_sig, $vers_fullname, $line ); + + + unless ( defined $vers{$pkg} && length $vers{$pkg} ) { + $vers{$pkg} = $v; + } else { + warn <<"EOM"; + Package '$pkg' already declared with version '$vers{$pkg}' + ignoring new version '$v' on line $line_num. + EOM + } + + } + + } + + } + + if ( $self->{collect_pod} && length($pod_data) ) { + $pod{$pod_sect} = $pod_data; + } + + $self->{versions} = \%vers; + $self->{packages} = \@pkgs; + $self->{pod} = \%pod; + $self->{pod_headings} = \@pod; + } + + { + my $pn = 0; + sub _evaluate_version_line { + my $self = shift; + my( $sigil, $var, $line ) = @_; + + # Some of this code came from the ExtUtils:: hierarchy. + + # We compile into $vsub because 'use version' would cause + # compiletime/runtime issues with local() + my $vsub; + $pn++; # everybody gets their own package + my $eval = qq{BEGIN { q# Hide from _packages_inside() + #; package Module::Metadata::_version::p$pn; + use version; + no strict; + + \$vsub = sub { + local $sigil$var; + \$$var=undef; + $line; + \$$var + }; + }}; + + local $^W; + # Try to get the $VERSION + eval $eval; + # some modules say $VERSION = $Foo::Bar::VERSION, but Foo::Bar isn't + # installed, so we need to hunt in ./lib for it + if ( $@ =~ /Can't locate/ && -d 'lib' ) { + local @INC = ('lib',@INC); + eval $eval; + } + warn "Error evaling version line '$eval' in $self->{filename}: $@\n" + if $@; + (ref($vsub) eq 'CODE') or + die "failed to build version sub for $self->{filename}"; + my $result = eval { $vsub->() }; + die "Could not get version from $self->{filename} by executing:\n$eval\n\nThe fatal error was: $@\n" + if $@; + + # Upgrade it into a version object + my $version = eval { _dwim_version($result) }; + + die "Version '$result' from $self->{filename} does not appear to be valid:\n$eval\n\nThe fatal error was: $@\n" + unless defined $version; # "0" is OK! + + return $version; + } + } + + # Try to DWIM when things fail the lax version test in obvious ways + { + my @version_prep = ( + # Best case, it just works + sub { return shift }, + + # If we still don't have a version, try stripping any + # trailing junk that is prohibited by lax rules + sub { + my $v = shift; + $v =~ s{([0-9])[a-z-].*$}{$1}i; # 1.23-alpha or 1.23b + return $v; + }, + + # Activestate apparently creates custom versions like '1.23_45_01', which + # cause version.pm to think it's an invalid alpha. So check for that + # and strip them + sub { + my $v = shift; + my $num_dots = () = $v =~ m{(\.)}g; + my $num_unders = () = $v =~ m{(_)}g; + my $leading_v = substr($v,0,1) eq 'v'; + if ( ! $leading_v && $num_dots < 2 && $num_unders > 1 ) { + $v =~ s{_}{}g; + $num_unders = () = $v =~ m{(_)}g; + } + return $v; + }, + + # Worst case, try numifying it like we would have before version objects + sub { + my $v = shift; + no warnings 'numeric'; + return 0 + $v; + }, + + ); + + sub _dwim_version { + my ($result) = shift; + + return $result if ref($result) eq 'version'; + + my ($version, $error); + for my $f (@version_prep) { + $result = $f->($result); + $version = eval { version->new($result) }; + $error ||= $@ if $@; # capture first failure + last if defined $version; + } + + die $error unless defined $version; + + return $version; + } + } + + ############################################################ + + # accessors + sub name { $_[0]->{module} } + + sub filename { $_[0]->{filename} } + sub packages_inside { @{$_[0]->{packages}} } + sub pod_inside { @{$_[0]->{pod_headings}} } + sub contains_pod { $#{$_[0]->{pod_headings}} } + + sub version { + my $self = shift; + my $mod = shift || $self->{module}; + my $vers; + if ( defined( $mod ) && length( $mod ) && + exists( $self->{versions}{$mod} ) ) { + return $self->{versions}{$mod}; + } else { + return undef; + } + } + + sub pod { + my $self = shift; + my $sect = shift; + if ( defined( $sect ) && length( $sect ) && + exists( $self->{pod}{$sect} ) ) { + return $self->{pod}{$sect}; + } else { + return undef; + } + } + + 1; + +MODULE_METADATA + +$fatpacked{"Parse/CPAN/Meta.pm"} = <<'PARSE_CPAN_META'; + package Parse::CPAN::Meta;
+
+ use strict;
+ use Carp 'croak';
+
+ # UTF Support?
+ sub HAVE_UTF8 () { $] >= 5.007003 }
+ sub IO_LAYER () { $] >= 5.008001 ? ":utf8" : "" }
+
+ BEGIN {
+ if ( HAVE_UTF8 ) {
+ # The string eval helps hide this from Test::MinimumVersion
+ eval "require utf8;";
+ die "Failed to load UTF-8 support" if $@;
+ }
+
+ # Class structure
+ require 5.004;
+ require Exporter;
+ $Parse::CPAN::Meta::VERSION = '1.4401';
+ @Parse::CPAN::Meta::ISA = qw{ Exporter };
+ @Parse::CPAN::Meta::EXPORT_OK = qw{ Load LoadFile };
+ }
+
+ sub load_file {
+ my ($class, $filename) = @_;
+
+ if ($filename =~ /\.ya?ml$/) {
+ return $class->load_yaml_string(_slurp($filename));
+ }
+
+ if ($filename =~ /\.json$/) {
+ return $class->load_json_string(_slurp($filename));
+ }
+
+ croak("file type cannot be determined by filename");
+ }
+
+ sub load_yaml_string {
+ my ($class, $string) = @_;
+ my $backend = $class->yaml_backend();
+ my $data = eval { no strict 'refs'; &{"$backend\::Load"}($string) };
+ if ( $@ ) {
+ croak $backend->can('errstr') ? $backend->errstr : $@
+ }
+ return $data || {}; # in case document was valid but empty
+ }
+
+ sub load_json_string {
+ my ($class, $string) = @_;
+ return $class->json_backend()->new->decode($string);
+ }
+
+ sub yaml_backend {
+ local $Module::Load::Conditional::CHECK_INC_HASH = 1;
+ if (! defined $ENV{PERL_YAML_BACKEND} ) {
+ _can_load( 'CPAN::Meta::YAML', 0.002 )
+ or croak "CPAN::Meta::YAML 0.002 is not available\n";
+ return "CPAN::Meta::YAML";
+ }
+ else {
+ my $backend = $ENV{PERL_YAML_BACKEND};
+ _can_load( $backend )
+ or croak "Could not load PERL_YAML_BACKEND '$backend'\n";
+ $backend->can("Load")
+ or croak "PERL_YAML_BACKEND '$backend' does not implement Load()\n";
+ return $backend;
+ }
+ }
+
+ sub json_backend {
+ local $Module::Load::Conditional::CHECK_INC_HASH = 1;
+ if (! $ENV{PERL_JSON_BACKEND} or $ENV{PERL_JSON_BACKEND} eq 'JSON::PP') {
+ _can_load( 'JSON::PP' => 2.27103 )
+ or croak "JSON::PP 2.27103 is not available\n";
+ return 'JSON::PP';
+ }
+ else {
+ _can_load( 'JSON' => 2.5 )
+ or croak "JSON 2.5 is required for " .
+ "\$ENV{PERL_JSON_BACKEND} = '$ENV{PERL_JSON_BACKEND}'\n";
+ return "JSON";
+ }
+ }
+
+ sub _slurp {
+ open my $fh, "<" . IO_LAYER, "$_[0]"
+ or die "can't open $_[0] for reading: $!";
+ return do { local $/; <$fh> };
+ }
+
+ sub _can_load {
+ my ($module, $version) = @_;
+ (my $file = $module) =~ s{::}{/}g;
+ $file .= ".pm";
+ return 1 if $INC{$file};
+ return 0 if exists $INC{$file}; # prior load failed
+ eval { require $file; 1 }
+ or return 0;
+ if ( defined $version ) {
+ eval { $module->VERSION($version); 1 }
+ or return 0;
+ }
+ return 1;
+ }
+
+ # Kept for backwards compatibility only
+ # Create an object from a file
+ sub LoadFile ($) {
+ require CPAN::Meta::YAML;
+ return CPAN::Meta::YAML::LoadFile(shift)
+ or die CPAN::Meta::YAML->errstr;
+ }
+
+ # Parse a document from a string.
+ sub Load ($) {
+ require CPAN::Meta::YAML;
+ return CPAN::Meta::YAML::Load(shift)
+ or die CPAN::Meta::YAML->errstr;
+ }
+
+ 1;
+
+ __END__
+
+PARSE_CPAN_META + +$fatpacked{"Try/Tiny.pm"} = <<'TRY_TINY'; + package Try::Tiny; + + use strict; + #use warnings; + + use vars qw(@EXPORT @EXPORT_OK $VERSION @ISA); + + BEGIN { + require Exporter; + @ISA = qw(Exporter); + } + + $VERSION = "0.09"; + + $VERSION = eval $VERSION; + + @EXPORT = @EXPORT_OK = qw(try catch finally); + + $Carp::Internal{+__PACKAGE__}++; + + # Need to prototype as @ not $$ because of the way Perl evaluates the prototype. + # Keeping it at $$ means you only ever get 1 sub because we need to eval in a list + # context & not a scalar one + + sub try (&;@) { + my ( $try, @code_refs ) = @_; + + # we need to save this here, the eval block will be in scalar context due + # to $failed + my $wantarray = wantarray; + + my ( $catch, @finally ); + + # find labeled blocks in the argument list. + # catch and finally tag the blocks by blessing a scalar reference to them. + foreach my $code_ref (@code_refs) { + next unless $code_ref; + + my $ref = ref($code_ref); + + if ( $ref eq 'Try::Tiny::Catch' ) { + $catch = ${$code_ref}; + } elsif ( $ref eq 'Try::Tiny::Finally' ) { + push @finally, ${$code_ref}; + } else { + use Carp; + confess("Unknown code ref type given '${ref}'. Check your usage & try again"); + } + } + + # save the value of $@ so we can set $@ back to it in the beginning of the eval + my $prev_error = $@; + + my ( @ret, $error, $failed ); + + # FIXME consider using local $SIG{__DIE__} to accumulate all errors. It's + # not perfect, but we could provide a list of additional errors for + # $catch->(); + + { + # localize $@ to prevent clobbering of previous value by a successful + # eval. + local $@; + + # failed will be true if the eval dies, because 1 will not be returned + # from the eval body + $failed = not eval { + $@ = $prev_error; + + # evaluate the try block in the correct context + if ( $wantarray ) { + @ret = $try->(); + } elsif ( defined $wantarray ) { + $ret[0] = $try->(); + } else { + $try->(); + }; + + return 1; # properly set $fail to false + }; + + # copy $@ to $error; when we leave this scope, local $@ will revert $@ + # back to its previous value + $error = $@; + } + + # set up a scope guard to invoke the finally block at the end + my @guards = + map { Try::Tiny::ScopeGuard->_new($_, $failed ? $error : ()) } + @finally; + + # at this point $failed contains a true value if the eval died, even if some + # destructor overwrote $@ as the eval was unwinding. + if ( $failed ) { + # if we got an error, invoke the catch block. + if ( $catch ) { + # This works like given($error), but is backwards compatible and + # sets $_ in the dynamic scope for the body of C<$catch> + for ($error) { + return $catch->($error); + } + + # in case when() was used without an explicit return, the C<for> + # loop will be aborted and there's no useful return value + } + + return; + } else { + # no failure, $@ is back to what it was, everything is fine + return $wantarray ? @ret : $ret[0]; + } + } + + sub catch (&;@) { + my ( $block, @rest ) = @_; + + return ( + bless(\$block, 'Try::Tiny::Catch'), + @rest, + ); + } + + sub finally (&;@) { + my ( $block, @rest ) = @_; + + return ( + bless(\$block, 'Try::Tiny::Finally'), + @rest, + ); + } + + { + package # hide from PAUSE + Try::Tiny::ScopeGuard; + + sub _new { + shift; + bless [ @_ ]; + } + + sub DESTROY { + my @guts = @{ shift() }; + my $code = shift @guts; + $code->(@guts); + } + } + + __PACKAGE__ + + __END__ + +TRY_TINY + +$fatpacked{"lib/core/only.pm"} = <<'LIB_CORE_ONLY'; + package lib::core::only; + + use strict; + use warnings FATAL => 'all'; + use Config; + + sub import { + @INC = @Config{qw(privlibexp archlibexp)}; + return + } + + 1; +LIB_CORE_ONLY + +$fatpacked{"local/lib.pm"} = <<'LOCAL_LIB'; + use strict; + use warnings; + + package local::lib; + + use 5.008001; # probably works with earlier versions but I'm not supporting them + # (patches would, of course, be welcome) + + use File::Spec (); + use File::Path (); + use Carp (); + use Config; + + our $VERSION = '1.008001'; # 1.8.1 + + our @KNOWN_FLAGS = qw(--self-contained); + + sub import { + my ($class, @args) = @_; + + # Remember what PERL5LIB was when we started + my $perl5lib = $ENV{PERL5LIB} || ''; + + my %arg_store; + for my $arg (@args) { + # check for lethal dash first to stop processing before causing problems + if ($arg =~ /−/) { + die <<'DEATH'; + WHOA THERE! It looks like you've got some fancy dashes in your commandline! + These are *not* the traditional -- dashes that software recognizes. You + probably got these by copy-pasting from the perldoc for this module as + rendered by a UTF8-capable formatter. This most typically happens on an OS X + terminal, but can happen elsewhere too. Please try again after replacing the + dashes with normal minus signs. + DEATH + } + elsif(grep { $arg eq $_ } @KNOWN_FLAGS) { + (my $flag = $arg) =~ s/--//; + $arg_store{$flag} = 1; + } + elsif($arg =~ /^--/) { + die "Unknown import argument: $arg"; + } + else { + # assume that what's left is a path + $arg_store{path} = $arg; + } + } + + if($arg_store{'self-contained'}) { + die "FATAL: The local::lib --self-contained flag has never worked reliably and the original author, Mark Stosberg, was unable or unwilling to maintain it. As such, this flag has been removed from the local::lib codebase in order to prevent misunderstandings and potentially broken builds. The local::lib authors recommend that you look at the lib::core::only module shipped with this distribution in order to create a more robust environment that is equivalent to what --self-contained provided (although quite possibly not what you originally thought it provided due to the poor quality of the documentation, for which we apologise).\n"; + } + + $arg_store{path} = $class->resolve_path($arg_store{path}); + $class->setup_local_lib_for($arg_store{path}); + + for (@INC) { # Untaint @INC + next if ref; # Skip entry if it is an ARRAY, CODE, blessed, etc. + m/(.*)/ and $_ = $1; + } + } + + sub pipeline; + + sub pipeline { + my @methods = @_; + my $last = pop(@methods); + if (@methods) { + \sub { + my ($obj, @args) = @_; + $obj->${pipeline @methods}( + $obj->$last(@args) + ); + }; + } else { + \sub { + shift->$last(@_); + }; + } + } + + sub _uniq { + my %seen; + grep { ! $seen{$_}++ } @_; + } + + sub resolve_path { + my ($class, $path) = @_; + $class->${pipeline qw( + resolve_relative_path + resolve_home_path + resolve_empty_path + )}($path); + } + + sub resolve_empty_path { + my ($class, $path) = @_; + if (defined $path) { + $path; + } else { + '~/perl5'; + } + } + + sub resolve_home_path { + my ($class, $path) = @_; + return $path unless ($path =~ /^~/); + my ($user) = ($path =~ /^~([^\/]+)/); # can assume ^~ so undef for 'us' + my $tried_file_homedir; + my $homedir = do { + if (eval { require File::HomeDir } && $File::HomeDir::VERSION >= 0.65) { + $tried_file_homedir = 1; + if (defined $user) { + File::HomeDir->users_home($user); + } else { + File::HomeDir->my_home; + } + } else { + if (defined $user) { + (getpwnam $user)[7]; + } else { + if (defined $ENV{HOME}) { + $ENV{HOME}; + } else { + (getpwuid $<)[7]; + } + } + } + }; + unless (defined $homedir) { + Carp::croak( + "Couldn't resolve homedir for " + .(defined $user ? $user : 'current user') + .($tried_file_homedir ? '' : ' - consider installing File::HomeDir') + ); + } + $path =~ s/^~[^\/]*/$homedir/; + $path; + } + + sub resolve_relative_path { + my ($class, $path) = @_; + $path = File::Spec->rel2abs($path); + } + + sub setup_local_lib_for { + my ($class, $path) = @_; + $path = $class->ensure_dir_structure_for($path); + if ($0 eq '-') { + $class->print_environment_vars_for($path); + exit 0; + } else { + $class->setup_env_hash_for($path); + @INC = _uniq(split($Config{path_sep}, $ENV{PERL5LIB}), @INC); + } + } + + sub install_base_bin_path { + my ($class, $path) = @_; + File::Spec->catdir($path, 'bin'); + } + + sub install_base_perl_path { + my ($class, $path) = @_; + File::Spec->catdir($path, 'lib', 'perl5'); + } + + sub install_base_arch_path { + my ($class, $path) = @_; + File::Spec->catdir($class->install_base_perl_path($path), $Config{archname}); + } + + sub ensure_dir_structure_for { + my ($class, $path) = @_; + unless (-d $path) { + warn "Attempting to create directory ${path}\n"; + } + File::Path::mkpath($path); + # Need to have the path exist to make a short name for it, so + # converting to a short name here. + $path = Win32::GetShortPathName($path) if $^O eq 'MSWin32'; + + return $path; + } + + sub INTERPOLATE_ENV () { 1 } + sub LITERAL_ENV () { 0 } + + sub guess_shelltype { + my $shellbin = 'sh'; + if(defined $ENV{'SHELL'}) { + my @shell_bin_path_parts = File::Spec->splitpath($ENV{'SHELL'}); + $shellbin = $shell_bin_path_parts[-1]; + } + my $shelltype = do { + local $_ = $shellbin; + if(/csh/) { + 'csh' + } else { + 'bourne' + } + }; + + # Both Win32 and Cygwin have $ENV{COMSPEC} set. + if (defined $ENV{'COMSPEC'} && $^O ne 'cygwin') { + my @shell_bin_path_parts = File::Spec->splitpath($ENV{'COMSPEC'}); + $shellbin = $shell_bin_path_parts[-1]; + $shelltype = do { + local $_ = $shellbin; + if(/command\.com/) { + 'win32' + } elsif(/cmd\.exe/) { + 'win32' + } elsif(/4nt\.exe/) { + 'win32' + } else { + $shelltype + } + }; + } + return $shelltype; + } + + sub print_environment_vars_for { + my ($class, $path) = @_; + print $class->environment_vars_string_for($path); + } + + sub environment_vars_string_for { + my ($class, $path) = @_; + my @envs = $class->build_environment_vars_for($path, LITERAL_ENV); + my $out = ''; + + # rather basic csh detection, goes on the assumption that something won't + # call itself csh unless it really is. also, default to bourne in the + # pathological situation where a user doesn't have $ENV{SHELL} defined. + # note also that shells with funny names, like zoid, are assumed to be + # bourne. + + my $shelltype = $class->guess_shelltype; + + while (@envs) { + my ($name, $value) = (shift(@envs), shift(@envs)); + $value =~ s/(\\")/\\$1/g; + $out .= $class->${\"build_${shelltype}_env_declaration"}($name, $value); + } + return $out; + } + + # simple routines that take two arguments: an %ENV key and a value. return + # strings that are suitable for passing directly to the relevant shell to set + # said key to said value. + sub build_bourne_env_declaration { + my $class = shift; + my($name, $value) = @_; + return qq{export ${name}="${value}"\n}; + } + + sub build_csh_env_declaration { + my $class = shift; + my($name, $value) = @_; + return qq{setenv ${name} "${value}"\n}; + } + + sub build_win32_env_declaration { + my $class = shift; + my($name, $value) = @_; + return qq{set ${name}=${value}\n}; + } + + sub setup_env_hash_for { + my ($class, $path) = @_; + my %envs = $class->build_environment_vars_for($path, INTERPOLATE_ENV); + @ENV{keys %envs} = values %envs; + } + + sub build_environment_vars_for { + my ($class, $path, $interpolate) = @_; + return ( + PERL_LOCAL_LIB_ROOT => $path, + PERL_MB_OPT => "--install_base ${path}", + PERL_MM_OPT => "INSTALL_BASE=${path}", + PERL5LIB => join($Config{path_sep}, + $class->install_base_arch_path($path), + $class->install_base_perl_path($path), + (($ENV{PERL5LIB}||()) ? + ($interpolate == INTERPOLATE_ENV + ? ($ENV{PERL5LIB}) + : (($^O ne 'MSWin32') ? '$PERL5LIB' : '%PERL5LIB%' )) + : ()) + ), + PATH => join($Config{path_sep}, + $class->install_base_bin_path($path), + ($interpolate == INTERPOLATE_ENV + ? ($ENV{PATH}||()) + : (($^O ne 'MSWin32') ? '$PATH' : '%PATH%' )) + ), + ) + } + + 1; +LOCAL_LIB + +$fatpacked{"parent.pm"} = <<'PARENT'; + package parent; + use strict; + use vars qw($VERSION); + $VERSION = '0.225'; + + sub import { + my $class = shift; + + my $inheritor = caller(0); + + if ( @_ and $_[0] eq '-norequire' ) { + shift @_; + } else { + for ( my @filename = @_ ) { + if ( $_ eq $inheritor ) { + warn "Class '$inheritor' tried to inherit from itself\n"; + }; + + s{::|'}{/}g; + require "$_.pm"; # dies if the file is not found + } + } + + { + no strict 'refs'; + push @{"$inheritor\::ISA"}, @_; + }; + }; + + "All your base are belong to us" + + __END__ + +PARENT + +$fatpacked{"version.pm"} = <<'VERSION'; + #!perl -w + package version; + + use 5.005_04; + use strict; + + use vars qw(@ISA $VERSION $CLASS $STRICT $LAX *declare *qv); + + $VERSION = 0.88; + + $CLASS = 'version'; + + #--------------------------------------------------------------------------# + # Version regexp components + #--------------------------------------------------------------------------# + + # Fraction part of a decimal version number. This is a common part of + # both strict and lax decimal versions + + my $FRACTION_PART = qr/\.[0-9]+/; + + # First part of either decimal or dotted-decimal strict version number. + # Unsigned integer with no leading zeroes (except for zero itself) to + # avoid confusion with octal. + + my $STRICT_INTEGER_PART = qr/0|[1-9][0-9]*/; + + # First part of either decimal or dotted-decimal lax version number. + # Unsigned integer, but allowing leading zeros. Always interpreted + # as decimal. However, some forms of the resulting syntax give odd + # results if used as ordinary Perl expressions, due to how perl treats + # octals. E.g. + # version->new("010" ) == 10 + # version->new( 010 ) == 8 + # version->new( 010.2) == 82 # "8" . "2" + + my $LAX_INTEGER_PART = qr/[0-9]+/; + + # Second and subsequent part of a strict dotted-decimal version number. + # Leading zeroes are permitted, and the number is always decimal. + # Limited to three digits to avoid overflow when converting to decimal + # form and also avoid problematic style with excessive leading zeroes. + + my $STRICT_DOTTED_DECIMAL_PART = qr/\.[0-9]{1,3}/; + + # Second and subsequent part of a lax dotted-decimal version number. + # Leading zeroes are permitted, and the number is always decimal. No + # limit on the numerical value or number of digits, so there is the + # possibility of overflow when converting to decimal form. + + my $LAX_DOTTED_DECIMAL_PART = qr/\.[0-9]+/; + + # Alpha suffix part of lax version number syntax. Acts like a + # dotted-decimal part. + + my $LAX_ALPHA_PART = qr/_[0-9]+/; + + #--------------------------------------------------------------------------# + # Strict version regexp definitions + #--------------------------------------------------------------------------# + + # Strict decimal version number. + + my $STRICT_DECIMAL_VERSION = + qr/ $STRICT_INTEGER_PART $FRACTION_PART? /x; + + # Strict dotted-decimal version number. Must have both leading "v" and + # at least three parts, to avoid confusion with decimal syntax. + + my $STRICT_DOTTED_DECIMAL_VERSION = + qr/ v $STRICT_INTEGER_PART $STRICT_DOTTED_DECIMAL_PART{2,} /x; + + # Complete strict version number syntax -- should generally be used + # anchored: qr/ \A $STRICT \z /x + + $STRICT = + qr/ $STRICT_DECIMAL_VERSION | $STRICT_DOTTED_DECIMAL_VERSION /x; + + #--------------------------------------------------------------------------# + # Lax version regexp definitions + #--------------------------------------------------------------------------# + + # Lax decimal version number. Just like the strict one except for + # allowing an alpha suffix or allowing a leading or trailing + # decimal-point + + my $LAX_DECIMAL_VERSION = + qr/ $LAX_INTEGER_PART (?: \. | $FRACTION_PART $LAX_ALPHA_PART? )? + | + $FRACTION_PART $LAX_ALPHA_PART? + /x; + + # Lax dotted-decimal version number. Distinguished by having either + # leading "v" or at least three non-alpha parts. Alpha part is only + # permitted if there are at least two non-alpha parts. Strangely + # enough, without the leading "v", Perl takes .1.2 to mean v0.1.2, + # so when there is no "v", the leading part is optional + + my $LAX_DOTTED_DECIMAL_VERSION = + qr/ + v $LAX_INTEGER_PART (?: $LAX_DOTTED_DECIMAL_PART+ $LAX_ALPHA_PART? )? + | + $LAX_INTEGER_PART? $LAX_DOTTED_DECIMAL_PART{2,} $LAX_ALPHA_PART? + /x; + + # Complete lax version number syntax -- should generally be used + # anchored: qr/ \A $LAX \z /x + # + # The string 'undef' is a special case to make for easier handling + # of return values from ExtUtils::MM->parse_version + + $LAX = + qr/ undef | $LAX_DECIMAL_VERSION | $LAX_DOTTED_DECIMAL_VERSION /x; + + #--------------------------------------------------------------------------# + + eval "use version::vxs $VERSION"; + if ( $@ ) { # don't have the XS version installed + eval "use version::vpp $VERSION"; # don't tempt fate + die "$@" if ( $@ ); + push @ISA, "version::vpp"; + local $^W; + *version::qv = \&version::vpp::qv; + *version::declare = \&version::vpp::declare; + *version::_VERSION = \&version::vpp::_VERSION; + if ($] >= 5.009000 && $] < 5.011004) { + no strict 'refs'; + *version::stringify = \&version::vpp::stringify; + *{'version::(""'} = \&version::vpp::stringify; + *version::new = \&version::vpp::new; + *version::parse = \&version::vpp::parse; + } + } + else { # use XS module + push @ISA, "version::vxs"; + local $^W; + *version::declare = \&version::vxs::declare; + *version::qv = \&version::vxs::qv; + *version::_VERSION = \&version::vxs::_VERSION; + *version::vcmp = \&version::vxs::VCMP; + if ($] >= 5.009000 && $] < 5.011004) { + no strict 'refs'; + *version::stringify = \&version::vxs::stringify; + *{'version::(""'} = \&version::vxs::stringify; + *version::new = \&version::vxs::new; + *version::parse = \&version::vxs::parse; + } + + } + + # Preloaded methods go here. + sub import { + no strict 'refs'; + my ($class) = shift; + + # Set up any derived class + unless ($class eq 'version') { + local $^W; + *{$class.'::declare'} = \&version::declare; + *{$class.'::qv'} = \&version::qv; + } + + my %args; + if (@_) { # any remaining terms are arguments + map { $args{$_} = 1 } @_ + } + else { # no parameters at all on use line + %args = + ( + qv => 1, + 'UNIVERSAL::VERSION' => 1, + ); + } + + my $callpkg = caller(); + + if (exists($args{declare})) { + *{$callpkg.'::declare'} = + sub {return $class->declare(shift) } + unless defined(&{$callpkg.'::declare'}); + } + + if (exists($args{qv})) { + *{$callpkg.'::qv'} = + sub {return $class->qv(shift) } + unless defined(&{$callpkg.'::qv'}); + } + + if (exists($args{'UNIVERSAL::VERSION'})) { + local $^W; + *UNIVERSAL::VERSION + = \&version::_VERSION; + } + + if (exists($args{'VERSION'})) { + *{$callpkg.'::VERSION'} = \&version::_VERSION; + } + + if (exists($args{'is_strict'})) { + *{$callpkg.'::is_strict'} = \&version::is_strict + unless defined(&{$callpkg.'::is_strict'}); + } + + if (exists($args{'is_lax'})) { + *{$callpkg.'::is_lax'} = \&version::is_lax + unless defined(&{$callpkg.'::is_lax'}); + } + } + + sub is_strict { defined $_[0] && $_[0] =~ qr/ \A $STRICT \z /x } + sub is_lax { defined $_[0] && $_[0] =~ qr/ \A $LAX \z /x } + + 1; +VERSION + +$fatpacked{"Version/Requirements.pm"} = <<'VERSION_REQUIREMENTS'; + use strict; + use warnings; + package Version::Requirements; + BEGIN { + $Version::Requirements::VERSION = '0.101020'; + } + # ABSTRACT: a set of version requirements for a CPAN dist + + + use Carp (); + use Scalar::Util (); + use version 0.77 (); # the ->parse method + + + sub new { + my ($class) = @_; + return bless {} => $class; + } + + sub _version_object { + my ($self, $version) = @_; + + $version = (! defined $version) ? version->parse(0) + : (! Scalar::Util::blessed($version)) ? version->parse($version) + : $version; + + return $version; + } + + + BEGIN { + for my $type (qw(minimum maximum exclusion exact_version)) { + my $method = "with_$type"; + my $to_add = $type eq 'exact_version' ? $type : "add_$type"; + + my $code = sub { + my ($self, $name, $version) = @_; + + $version = $self->_version_object( $version ); + + $self->__modify_entry_for($name, $method, $version); + + return $self; + }; + + no strict 'refs'; + *$to_add = $code; + } + } + + + sub add_requirements { + my ($self, $req) = @_; + + for my $module ($req->required_modules) { + my $modifiers = $req->__entry_for($module)->as_modifiers; + for my $modifier (@$modifiers) { + my ($method, @args) = @$modifier; + $self->$method($module => @args); + }; + } + + return $self; + } + + + sub accepts_module { + my ($self, $module, $version) = @_; + + $version = $self->_version_object( $version ); + + return 1 unless my $range = $self->__entry_for($module); + return $range->_accepts($version); + } + + + sub clear_requirement { + my ($self, $module) = @_; + + return $self unless $self->__entry_for($module); + + Carp::confess("can't clear requirements on finalized requirements") + if $self->is_finalized; + + delete $self->{requirements}{ $module }; + + return $self; + } + + + sub required_modules { keys %{ $_[0]{requirements} } } + + + sub clone { + my ($self) = @_; + my $new = (ref $self)->new; + + return $new->add_requirements($self); + } + + sub __entry_for { $_[0]{requirements}{ $_[1] } } + + sub __modify_entry_for { + my ($self, $name, $method, $version) = @_; + + my $fin = $self->is_finalized; + my $old = $self->__entry_for($name); + + Carp::confess("can't add new requirements to finalized requirements") + if $fin and not $old; + + my $new = ($old || 'Version::Requirements::_Range::Range') + ->$method($version); + + Carp::confess("can't modify finalized requirements") + if $fin and $old->as_string ne $new->as_string; + + $self->{requirements}{ $name } = $new; + } + + + sub is_simple { + my ($self) = @_; + for my $module ($self->required_modules) { + # XXX: This is a complete hack, but also entirely correct. + return if $self->__entry_for($module)->as_string =~ /\s/; + } + + return 1; + } + + + sub is_finalized { $_[0]{finalized} } + + + sub finalize { $_[0]{finalized} = 1 } + + + sub as_string_hash { + my ($self) = @_; + + my %hash = map {; $_ => $self->{requirements}{$_}->as_string } + $self->required_modules; + + return \%hash; + } + + + my %methods_for_op = ( + '==' => [ qw(exact_version) ], + '!=' => [ qw(add_exclusion) ], + '>=' => [ qw(add_minimum) ], + '<=' => [ qw(add_maximum) ], + '>' => [ qw(add_minimum add_exclusion) ], + '<' => [ qw(add_maximum add_exclusion) ], + ); + + sub from_string_hash { + my ($class, $hash) = @_; + + my $self = $class->new; + + for my $module (keys %$hash) { + my @parts = split qr{\s*,\s*}, $hash->{ $module }; + for my $part (@parts) { + my ($op, $ver) = split /\s+/, $part, 2; + + if (! defined $ver) { + $self->add_minimum($module => $op); + } else { + Carp::confess("illegal requirement string: $hash->{ $module }") + unless my $methods = $methods_for_op{ $op }; + + $self->$_($module => $ver) for @$methods; + } + } + } + + return $self; + } + + ############################################################## + + { + package + Version::Requirements::_Range::Exact; + BEGIN { + $Version::Requirements::_Range::Exact::VERSION = '0.101020'; + } + sub _new { bless { version => $_[1] } => $_[0] } + + sub _accepts { return $_[0]{version} == $_[1] } + + sub as_string { return "== $_[0]{version}" } + + sub as_modifiers { return [ [ exact_version => $_[0]{version} ] ] } + + sub _clone { + (ref $_[0])->_new( version->new( $_[0]{version} ) ) + } + + sub with_exact_version { + my ($self, $version) = @_; + + return $self->_clone if $self->_accepts($version); + + Carp::confess("illegal requirements: unequal exact version specified"); + } + + sub with_minimum { + my ($self, $minimum) = @_; + return $self->_clone if $self->{version} >= $minimum; + Carp::confess("illegal requirements: minimum above exact specification"); + } + + sub with_maximum { + my ($self, $maximum) = @_; + return $self->_clone if $self->{version} <= $maximum; + Carp::confess("illegal requirements: maximum below exact specification"); + } + + sub with_exclusion { + my ($self, $exclusion) = @_; + return $self->_clone unless $exclusion == $self->{version}; + Carp::confess("illegal requirements: excluded exact specification"); + } + } + + ############################################################## + + { + package + Version::Requirements::_Range::Range; + BEGIN { + $Version::Requirements::_Range::Range::VERSION = '0.101020'; + } + + sub _self { ref($_[0]) ? $_[0] : (bless { } => $_[0]) } + + sub _clone { + return (bless { } => $_[0]) unless ref $_[0]; + + my ($s) = @_; + my %guts = ( + (exists $s->{minimum} ? (minimum => version->new($s->{minimum})) : ()), + (exists $s->{maximum} ? (maximum => version->new($s->{maximum})) : ()), + + (exists $s->{exclusions} + ? (exclusions => [ map { version->new($_) } @{ $s->{exclusions} } ]) + : ()), + ); + + bless \%guts => ref($s); + } + + sub as_modifiers { + my ($self) = @_; + my @mods; + push @mods, [ add_minimum => $self->{minimum} ] if exists $self->{minimum}; + push @mods, [ add_maximum => $self->{maximum} ] if exists $self->{maximum}; + push @mods, map {; [ add_exclusion => $_ ] } @{$self->{exclusions} || []}; + return \@mods; + } + + sub as_string { + my ($self) = @_; + + return 0 if ! keys %$self; + + return "$self->{minimum}" if (keys %$self) == 1 and exists $self->{minimum}; + + my @exclusions = @{ $self->{exclusions} || [] }; + + my @parts; + + for my $pair ( + [ qw( >= > minimum ) ], + [ qw( <= < maximum ) ], + ) { + my ($op, $e_op, $k) = @$pair; + if (exists $self->{$k}) { + my @new_exclusions = grep { $_ != $self->{ $k } } @exclusions; + if (@new_exclusions == @exclusions) { + push @parts, "$op $self->{ $k }"; + } else { + push @parts, "$e_op $self->{ $k }"; + @exclusions = @new_exclusions; + } + } + } + + push @parts, map {; "!= $_" } @exclusions; + + return join q{, }, @parts; + } + + sub with_exact_version { + my ($self, $version) = @_; + $self = $self->_clone; + + Carp::confess("illegal requirements: exact specification outside of range") + unless $self->_accepts($version); + + return Version::Requirements::_Range::Exact->_new($version); + } + + sub _simplify { + my ($self) = @_; + + if (defined $self->{minimum} and defined $self->{maximum}) { + if ($self->{minimum} == $self->{maximum}) { + Carp::confess("illegal requirements: excluded all values") + if grep { $_ == $self->{minimum} } @{ $self->{exclusions} || [] }; + + return Version::Requirements::_Range::Exact->_new($self->{minimum}) + } + + Carp::confess("illegal requirements: minimum exceeds maximum") + if $self->{minimum} > $self->{maximum}; + } + + # eliminate irrelevant exclusions + if ($self->{exclusions}) { + my %seen; + @{ $self->{exclusions} } = grep { + (! defined $self->{minimum} or $_ >= $self->{minimum}) + and + (! defined $self->{maximum} or $_ <= $self->{maximum}) + and + ! $seen{$_}++ + } @{ $self->{exclusions} }; + } + + return $self; + } + + sub with_minimum { + my ($self, $minimum) = @_; + $self = $self->_clone; + + if (defined (my $old_min = $self->{minimum})) { + $self->{minimum} = (sort { $b cmp $a } ($minimum, $old_min))[0]; + } else { + $self->{minimum} = $minimum; + } + + return $self->_simplify; + } + + sub with_maximum { + my ($self, $maximum) = @_; + $self = $self->_clone; + + if (defined (my $old_max = $self->{maximum})) { + $self->{maximum} = (sort { $a cmp $b } ($maximum, $old_max))[0]; + } else { + $self->{maximum} = $maximum; + } + + return $self->_simplify; + } + + sub with_exclusion { + my ($self, $exclusion) = @_; + $self = $self->_clone; + + push @{ $self->{exclusions} ||= [] }, $exclusion; + + return $self->_simplify; + } + + sub _accepts { + my ($self, $version) = @_; + + return if defined $self->{minimum} and $version < $self->{minimum}; + return if defined $self->{maximum} and $version > $self->{maximum}; + return if defined $self->{exclusions} + and grep { $version == $_ } @{ $self->{exclusions} }; + + return 1; + } + } + + 1; + + __END__ + =pod + +VERSION_REQUIREMENTS + +$fatpacked{"version/vpp.pm"} = <<'VERSION_VPP'; + package charstar; + # a little helper class to emulate C char* semantics in Perl + # so that prescan_version can use the same code as in C + + use overload ( + '""' => \&thischar, + '0+' => \&thischar, + '++' => \&increment, + '--' => \&decrement, + '+' => \&plus, + '-' => \&minus, + '*' => \&multiply, + 'cmp' => \&cmp, + '<=>' => \&spaceship, + 'bool' => \&thischar, + '=' => \&clone, + ); + + sub new { + my ($self, $string) = @_; + my $class = ref($self) || $self; + + my $obj = { + string => [split(//,$string)], + current => 0, + }; + return bless $obj, $class; + } + + sub thischar { + my ($self) = @_; + my $last = $#{$self->{string}}; + my $curr = $self->{current}; + if ($curr >= 0 && $curr <= $last) { + return $self->{string}->[$curr]; + } + else { + return ''; + } + } + + sub increment { + my ($self) = @_; + $self->{current}++; + } + + sub decrement { + my ($self) = @_; + $self->{current}--; + } + + sub plus { + my ($self, $offset) = @_; + my $rself = $self->clone; + $rself->{current} += $offset; + return $rself; + } + + sub minus { + my ($self, $offset) = @_; + my $rself = $self->clone; + $rself->{current} -= $offset; + return $rself; + } + + sub multiply { + my ($left, $right, $swapped) = @_; + my $char = $left->thischar(); + return $char * $right; + } + + sub spaceship { + my ($left, $right, $swapped) = @_; + unless (ref($right)) { # not an object already + $right = $left->new($right); + } + return $left->{current} <=> $right->{current}; + } + + sub cmp { + my ($left, $right, $swapped) = @_; + unless (ref($right)) { # not an object already + if (length($right) == 1) { # comparing single character only + return $left->thischar cmp $right; + } + $right = $left->new($right); + } + return $left->currstr cmp $right->currstr; + } + + sub bool { + my ($self) = @_; + my $char = $self->thischar; + return ($char ne ''); + } + + sub clone { + my ($left, $right, $swapped) = @_; + $right = { + string => [@{$left->{string}}], + current => $left->{current}, + }; + return bless $right, ref($left); + } + + sub currstr { + my ($self, $s) = @_; + my $curr = $self->{current}; + my $last = $#{$self->{string}}; + if (defined($s) && $s->{current} < $last) { + $last = $s->{current}; + } + + my $string = join('', @{$self->{string}}[$curr..$last]); + return $string; + } + + package version::vpp; + use strict; + + use POSIX qw/locale_h/; + use locale; + use vars qw ($VERSION @ISA @REGEXS); + $VERSION = 0.88; + + use overload ( + '""' => \&stringify, + '0+' => \&numify, + 'cmp' => \&vcmp, + '<=>' => \&vcmp, + 'bool' => \&vbool, + 'nomethod' => \&vnoop, + ); + + eval "use warnings"; + if ($@) { + eval ' + package warnings; + sub enabled {return $^W;} + 1; + '; + } + + my $VERSION_MAX = 0x7FFFFFFF; + + # implement prescan_version as closely to the C version as possible + use constant TRUE => 1; + use constant FALSE => 0; + + sub isDIGIT { + my ($char) = shift->thischar(); + return ($char =~ /\d/); + } + + sub isALPHA { + my ($char) = shift->thischar(); + return ($char =~ /[a-zA-Z]/); + } + + sub isSPACE { + my ($char) = shift->thischar(); + return ($char =~ /\s/); + } + + sub BADVERSION { + my ($s, $errstr, $error) = @_; + if ($errstr) { + $$errstr = $error; + } + return $s; + } + + sub prescan_version { + my ($s, $strict, $errstr, $sqv, $ssaw_decimal, $swidth, $salpha) = @_; + my $qv = defined $sqv ? $$sqv : FALSE; + my $saw_decimal = defined $ssaw_decimal ? $$ssaw_decimal : 0; + my $width = defined $swidth ? $$swidth : 3; + my $alpha = defined $salpha ? $$salpha : FALSE; + + my $d = $s; + + if ($qv && isDIGIT($d)) { + goto dotted_decimal_version; + } + + if ($d eq 'v') { # explicit v-string + $d++; + if (isDIGIT($d)) { + $qv = TRUE; + } + else { # degenerate v-string + # requires v1.2.3 + return BADVERSION($s,$errstr,"Invalid version format (dotted-decimal versions require at least three parts)"); + } + + dotted_decimal_version: + if ($strict && $d eq '0' && isDIGIT($d+1)) { + # no leading zeros allowed + return BADVERSION($s,$errstr,"Invalid version format (no leading zeros)"); + } + + while (isDIGIT($d)) { # integer part + $d++; + } + + if ($d eq '.') + { + $saw_decimal++; + $d++; # decimal point + } + else + { + if ($strict) { + # require v1.2.3 + return BADVERSION($s,$errstr,"Invalid version format (dotted-decimal versions require at least three parts)"); + } + else { + goto version_prescan_finish; + } + } + + { + my $i = 0; + my $j = 0; + while (isDIGIT($d)) { # just keep reading + $i++; + while (isDIGIT($d)) { + $d++; $j++; + # maximum 3 digits between decimal + if ($strict && $j > 3) { + return BADVERSION($s,$errstr,"Invalid version format (maximum 3 digits between decimals)"); + } + } + if ($d eq '_') { + if ($strict) { + return BADVERSION($s,$errstr,"Invalid version format (no underscores)"); + } + if ( $alpha ) { + return BADVERSION($s,$errstr,"Invalid version format (multiple underscores)"); + } + $d++; + $alpha = TRUE; + } + elsif ($d eq '.') { + if ($alpha) { + return BADVERSION($s,$errstr,"Invalid version format (underscores before decimal)"); + } + $saw_decimal++; + $d++; + } + elsif (!isDIGIT($d)) { + last; + } + $j = 0; + } + + if ($strict && $i < 2) { + # requires v1.2.3 + return BADVERSION($s,$errstr,"Invalid version format (dotted-decimal versions require at least three parts)"); + } + } + } # end if dotted-decimal + else + { # decimal versions + # special $strict case for leading '.' or '0' + if ($strict) { + if ($d eq '.') { + return BADVERSION($s,$errstr,"Invalid version format (0 before decimal required)"); + } + if ($d eq '0' && isDIGIT($d+1)) { + return BADVERSION($s,$errstr,"Invalid version format (no leading zeros)"); + } + } + + # consume all of the integer part + while (isDIGIT($d)) { + $d++; + } + + # look for a fractional part + if ($d eq '.') { + # we found it, so consume it + $saw_decimal++; + $d++; + } + elsif (!$d || $d eq ';' || isSPACE($d) || $d eq '}') { + if ( $d == $s ) { + # found nothing + return BADVERSION($s,$errstr,"Invalid version format (version required)"); + } + # found just an integer + goto version_prescan_finish; + } + elsif ( $d == $s ) { + # didn't find either integer or period + return BADVERSION($s,$errstr,"Invalid version format (non-numeric data)"); + } + elsif ($d eq '_') { + # underscore can't come after integer part + if ($strict) { + return BADVERSION($s,$errstr,"Invalid version format (no underscores)"); + } + elsif (isDIGIT($d+1)) { + return BADVERSION($s,$errstr,"Invalid version format (alpha without decimal)"); + } + else { + return BADVERSION($s,$errstr,"Invalid version format (misplaced underscore)"); + } + } + elsif ($d) { + # anything else after integer part is just invalid data + return BADVERSION($s,$errstr,"Invalid version format (non-numeric data)"); + } + + # scan the fractional part after the decimal point + if ($d && !isDIGIT($d) && ($strict || ! ($d eq ';' || isSPACE($d) || $d eq '}') )) { + # $strict or lax-but-not-the-end + return BADVERSION($s,$errstr,"Invalid version format (fractional part required)"); + } + + while (isDIGIT($d)) { + $d++; + if ($d eq '.' && isDIGIT($d-1)) { + if ($alpha) { + return BADVERSION($s,$errstr,"Invalid version format (underscores before decimal)"); + } + if ($strict) { + return BADVERSION($s,$errstr,"Invalid version format (dotted-decimal versions must begin with 'v')"); + } + $d = $s; # start all over again + $qv = TRUE; + goto dotted_decimal_version; + } + if ($d eq '_') { + if ($strict) { + return BADVERSION($s,$errstr,"Invalid version format (no underscores)"); + } + if ( $alpha ) { + return BADVERSION($s,$errstr,"Invalid version format (multiple underscores)"); + } + if ( ! isDIGIT($d+1) ) { + return BADVERSION($s,$errstr,"Invalid version format (misplaced underscore)"); + } + $d++; + $alpha = TRUE; + } + } + } + + version_prescan_finish: + while (isSPACE($d)) { + $d++; + } + + if ($d && !isDIGIT($d) && (! ($d eq ';' || $d eq '}') )) { + # trailing non-numeric data + return BADVERSION($s,$errstr,"Invalid version format (non-numeric data)"); + } + + if (defined $sqv) { + $$sqv = $qv; + } + if (defined $swidth) { + $$swidth = $width; + } + if (defined $ssaw_decimal) { + $$ssaw_decimal = $saw_decimal; + } + if (defined $salpha) { + $$salpha = $alpha; + } + return $d; + } + + sub scan_version { + my ($s, $rv, $qv) = @_; + my $start; + my $pos; + my $last; + my $errstr; + my $saw_decimal = 0; + my $width = 3; + my $alpha = FALSE; + my $vinf = FALSE; + my @av; + + $s = new charstar $s; + + while (isSPACE($s)) { # leading whitespace is OK + $s++; + } + + $last = prescan_version($s, FALSE, \$errstr, \$qv, \$saw_decimal, + \$width, \$alpha); + + if ($errstr) { + # 'undef' is a special case and not an error + if ( $s ne 'undef') { + use Carp; + Carp::croak($errstr); + } + } + + $start = $s; + if ($s eq 'v') { + $s++; + } + $pos = $s; + + if ( $qv ) { + $$rv->{qv} = $qv; + } + if ( $alpha ) { + $$rv->{alpha} = $alpha; + } + if ( !$qv && $width < 3 ) { + $$rv->{width} = $width; + } + + while (isDIGIT($pos)) { + $pos++; + } + if (!isALPHA($pos)) { + my $rev; + + for (;;) { + $rev = 0; + { + # this is atoi() that delimits on underscores + my $end = $pos; + my $mult = 1; + my $orev; + + # the following if() will only be true after the decimal + # point of a version originally created with a bare + # floating point number, i.e. not quoted in any way + # + if ( !$qv && $s > $start && $saw_decimal == 1 ) { + $mult *= 100; + while ( $s < $end ) { + $orev = $rev; + $rev += $s * $mult; + $mult /= 10; + if ( (abs($orev) > abs($rev)) + || (abs($rev) > $VERSION_MAX )) { + warn("Integer overflow in version %d", + $VERSION_MAX); + $s = $end - 1; + $rev = $VERSION_MAX; + $vinf = 1; + } + $s++; + if ( $s eq '_' ) { + $s++; + } + } + } + else { + while (--$end >= $s) { + $orev = $rev; + $rev += $end * $mult; + $mult *= 10; + if ( (abs($orev) > abs($rev)) + || (abs($rev) > $VERSION_MAX )) { + warn("Integer overflow in version"); + $end = $s - 1; + $rev = $VERSION_MAX; + $vinf = 1; + } + } + } + } + + # Append revision + push @av, $rev; + if ( $vinf ) { + $s = $last; + last; + } + elsif ( $pos eq '.' ) { + $s = ++$pos; + } + elsif ( $pos eq '_' && isDIGIT($pos+1) ) { + $s = ++$pos; + } + elsif ( $pos eq ',' && isDIGIT($pos+1) ) { + $s = ++$pos; + } + elsif ( isDIGIT($pos) ) { + $s = $pos; + } + else { + $s = $pos; + last; + } + if ( $qv ) { + while ( isDIGIT($pos) ) { + $pos++; + } + } + else { + my $digits = 0; + while ( ( isDIGIT($pos) || $pos eq '_' ) && $digits < 3 ) { + if ( $pos ne '_' ) { + $digits++; + } + $pos++; + } + } + } + } + if ( $qv ) { # quoted versions always get at least three terms + my $len = $#av; + # This for loop appears to trigger a compiler bug on OS X, as it + # loops infinitely. Yes, len is negative. No, it makes no sense. + # Compiler in question is: + # gcc version 3.3 20030304 (Apple Computer, Inc. build 1640) + # for ( len = 2 - len; len > 0; len-- ) + # av_push(MUTABLE_AV(sv), newSViv(0)); + # + $len = 2 - $len; + while ($len-- > 0) { + push @av, 0; + } + } + + # need to save off the current version string for later + if ( $vinf ) { + $$rv->{original} = "v.Inf"; + $$rv->{vinf} = 1; + } + elsif ( $s > $start ) { + $$rv->{original} = $start->currstr($s); + if ( $qv && $saw_decimal == 1 && $start ne 'v' ) { + # need to insert a v to be consistent + $$rv->{original} = 'v' . $$rv->{original}; + } + } + else { + $$rv->{original} = '0'; + push(@av, 0); + } + + # And finally, store the AV in the hash + $$rv->{version} = \@av; + + # fix RT#19517 - special case 'undef' as string + if ($s eq 'undef') { + $s += 5; + } + + return $s; + } + + sub new + { + my ($class, $value) = @_; + my $self = bless ({}, ref ($class) || $class); + my $qv = FALSE; + + if ( ref($value) && eval('$value->isa("version")') ) { + # Can copy the elements directly + $self->{version} = [ @{$value->{version} } ]; + $self->{qv} = 1 if $value->{qv}; + $self->{alpha} = 1 if $value->{alpha}; + $self->{original} = ''.$value->{original}; + return $self; + } + + my $currlocale = setlocale(LC_ALL); + + # if the current locale uses commas for decimal points, we + # just replace commas with decimal places, rather than changing + # locales + if ( localeconv()->{decimal_point} eq ',' ) { + $value =~ tr/,/./; + } + + if ( not defined $value or $value =~ /^undef$/ ) { + # RT #19517 - special case for undef comparison + # or someone forgot to pass a value + push @{$self->{version}}, 0; + $self->{original} = "0"; + return ($self); + } + + if ( $#_ == 2 ) { # must be CVS-style + $value = $_[2]; + $qv = TRUE; + } + + $value = _un_vstring($value); + + # exponential notation + if ( $value =~ /\d+.?\d*e[-+]?\d+/ ) { + $value = sprintf("%.9f",$value); + $value =~ s/(0+)$//; # trim trailing zeros + } + + my $s = scan_version($value, \$self, $qv); + + if ($s) { # must be something left over + warn("Version string '%s' contains invalid data; " + ."ignoring: '%s'", $value, $s); + } + + return ($self); + } + + *parse = \&new; + + sub numify + { + my ($self) = @_; + unless (_verify($self)) { + require Carp; + Carp::croak("Invalid version object"); + } + my $width = $self->{width} || 3; + my $alpha = $self->{alpha} || ""; + my $len = $#{$self->{version}}; + my $digit = $self->{version}[0]; + my $string = sprintf("%d.", $digit ); + + for ( my $i = 1 ; $i < $len ; $i++ ) { + $digit = $self->{version}[$i]; + if ( $width < 3 ) { + my $denom = 10**(3-$width); + my $quot = int($digit/$denom); + my $rem = $digit - ($quot * $denom); + $string .= sprintf("%0".$width."d_%d", $quot, $rem); + } + else { + $string .= sprintf("%03d", $digit); + } + } + + if ( $len > 0 ) { + $digit = $self->{version}[$len]; + if ( $alpha && $width == 3 ) { + $string .= "_"; + } + $string .= sprintf("%0".$width."d", $digit); + } + else # $len = 0 + { + $string .= sprintf("000"); + } + + return $string; + } + + sub normal + { + my ($self) = @_; + unless (_verify($self)) { + require Carp; + Carp::croak("Invalid version object"); + } + my $alpha = $self->{alpha} || ""; + my $len = $#{$self->{version}}; + my $digit = $self->{version}[0]; + my $string = sprintf("v%d", $digit ); + + for ( my $i = 1 ; $i < $len ; $i++ ) { + $digit = $self->{version}[$i]; + $string .= sprintf(".%d", $digit); + } + + if ( $len > 0 ) { + $digit = $self->{version}[$len]; + if ( $alpha ) { + $string .= sprintf("_%0d", $digit); + } + else { + $string .= sprintf(".%0d", $digit); + } + } + + if ( $len <= 2 ) { + for ( $len = 2 - $len; $len != 0; $len-- ) { + $string .= sprintf(".%0d", 0); + } + } + + return $string; + } + + sub stringify + { + my ($self) = @_; + unless (_verify($self)) { + require Carp; + Carp::croak("Invalid version object"); + } + return exists $self->{original} + ? $self->{original} + : exists $self->{qv} + ? $self->normal + : $self->numify; + } + + sub vcmp + { + require UNIVERSAL; + my ($left,$right,$swap) = @_; + my $class = ref($left); + unless ( UNIVERSAL::isa($right, $class) ) { + $right = $class->new($right); + } + + if ( $swap ) { + ($left, $right) = ($right, $left); + } + unless (_verify($left)) { + require Carp; + Carp::croak("Invalid version object"); + } + unless (_verify($right)) { + require Carp; + Carp::croak("Invalid version object"); + } + my $l = $#{$left->{version}}; + my $r = $#{$right->{version}}; + my $m = $l < $r ? $l : $r; + my $lalpha = $left->is_alpha; + my $ralpha = $right->is_alpha; + my $retval = 0; + my $i = 0; + while ( $i <= $m && $retval == 0 ) { + $retval = $left->{version}[$i] <=> $right->{version}[$i]; + $i++; + } + + # tiebreaker for alpha with identical terms + if ( $retval == 0 + && $l == $r + && $left->{version}[$m] == $right->{version}[$m] + && ( $lalpha || $ralpha ) ) { + + if ( $lalpha && !$ralpha ) { + $retval = -1; + } + elsif ( $ralpha && !$lalpha) { + $retval = +1; + } + } + + # possible match except for trailing 0's + if ( $retval == 0 && $l != $r ) { + if ( $l < $r ) { + while ( $i <= $r && $retval == 0 ) { + if ( $right->{version}[$i] != 0 ) { + $retval = -1; # not a match after all + } + $i++; + } + } + else { + while ( $i <= $l && $retval == 0 ) { + if ( $left->{version}[$i] != 0 ) { + $retval = +1; # not a match after all + } + $i++; + } + } + } + + return $retval; + } + + sub vbool { + my ($self) = @_; + return vcmp($self,$self->new("0"),1); + } + + sub vnoop { + require Carp; + Carp::croak("operation not supported with version object"); + } + + sub is_alpha { + my ($self) = @_; + return (exists $self->{alpha}); + } + + sub qv { + my $value = shift; + my $class = 'version'; + if (@_) { + $class = ref($value) || $value; + $value = shift; + } + + $value = _un_vstring($value); + $value = 'v'.$value unless $value =~ /(^v|\d+\.\d+\.\d)/; + my $version = $class->new($value); + return $version; + } + + *declare = \&qv; + + sub is_qv { + my ($self) = @_; + return (exists $self->{qv}); + } + + + sub _verify { + my ($self) = @_; + if ( ref($self) + && eval { exists $self->{version} } + && ref($self->{version}) eq 'ARRAY' + ) { + return 1; + } + else { + return 0; + } + } + + sub _is_non_alphanumeric { + my $s = shift; + $s = new charstar $s; + while ($s) { + return 0 if isSPACE($s); # early out + return 1 unless (isALPHA($s) || isDIGIT($s) || $s =~ /[.-]/); + $s++; + } + return 0; + } + + sub _un_vstring { + my $value = shift; + # may be a v-string + if ( length($value) >= 3 && $value !~ /[._]/ + && _is_non_alphanumeric($value)) { + my $tvalue; + if ( $] ge 5.008_001 ) { + $tvalue = _find_magic_vstring($value); + $value = $tvalue if length $tvalue; + } + elsif ( $] ge 5.006_000 ) { + $tvalue = sprintf("v%vd",$value); + if ( $tvalue =~ /^v\d+(\.\d+){2,}$/ ) { + # must be a v-string + $value = $tvalue; + } + } + } + return $value; + } + + sub _find_magic_vstring { + my $value = shift; + my $tvalue = ''; + require B; + my $sv = B::svref_2object(\$value); + my $magic = ref($sv) eq 'B::PVMG' ? $sv->MAGIC : undef; + while ( $magic ) { + if ( $magic->TYPE eq 'V' ) { + $tvalue = $magic->PTR; + $tvalue =~ s/^v?(.+)$/v$1/; + last; + } + else { + $magic = $magic->MOREMAGIC; + } + } + return $tvalue; + } + + sub _VERSION { + my ($obj, $req) = @_; + my $class = ref($obj) || $obj; + + no strict 'refs'; + if ( exists $INC{"$class.pm"} and not %{"$class\::"} and $] >= 5.008) { + # file but no package + require Carp; + Carp::croak( "$class defines neither package nor VERSION" + ."--version check failed"); + } + + my $version = eval "\$$class\::VERSION"; + if ( defined $version ) { + local $^W if $] <= 5.008; + $version = version::vpp->new($version); + } + + if ( defined $req ) { + unless ( defined $version ) { + require Carp; + my $msg = $] < 5.006 + ? "$class version $req required--this is only version " + : "$class does not define \$$class\::VERSION" + ."--version check failed"; + + if ( $ENV{VERSION_DEBUG} ) { + Carp::confess($msg); + } + else { + Carp::croak($msg); + } + } + + $req = version::vpp->new($req); + + if ( $req > $version ) { + require Carp; + if ( $req->is_qv ) { + Carp::croak( + sprintf ("%s version %s required--". + "this is only version %s", $class, + $req->normal, $version->normal) + ); + } + else { + Carp::croak( + sprintf ("%s version %s required--". + "this is only version %s", $class, + $req->stringify, $version->stringify) + ); + } + } + } + + return defined $version ? $version->stringify : undef; + } + + 1; #this line is important and will help the module return a true value +VERSION_VPP + +s/^ //mg for values %fatpacked; + +unshift @INC, sub { + if (my $fat = $fatpacked{$_[1]}) { + open my $fh, '<', \$fat + or die "FatPacker error loading $_[1] (could be a perl installation issue?)"; + return $fh; + } + return +}; + +} # END OF FATPACK CODE + +use strict; +use App::cpanminus::script; + +unless (caller) { + my $app = App::cpanminus::script->new; + $app->parse_options(@ARGV); + $app->doit or exit(1); +} + +__END__ + +=head1 NAME + +cpanm - get, unpack build and install modules from CPAN + +=head1 SYNOPSIS + + cpanm Test::More # install Test::More + cpanm MIYAGAWA/Plack-0.99_05.tar.gz # full distribution path + cpanm http://example.org/LDS/CGI.pm-3.20.tar.gz # install from URL + cpanm ~/dists/MyCompany-Enterprise-1.00.tar.gz # install from a local file + cpanm --interactive Task::Kensho # Configure interactively + cpanm . # install from local directory + cpanm --installdeps . # install all the deps for the current directory + cpanm -L extlib Plack # install Plack and all non-core deps into extlib + cpanm --mirror http://cpan.cpantesters.org/ DBI # use the fast-syncing mirror + cpanm --scandeps Moose # See what modules will be installed for Moose + +=head1 COMMANDS + +=over 4 + +=item -i, --install + +Installs the modules. This is a default behavior and this is just a +compatibility option to make it work like L<cpan> or L<cpanp>. + +=item --self-upgrade + +Upgrades itself. It's just an alias for: + + cpanm App::cpanminus + +=item --info + +Displays the distribution information in +C<AUTHOR/Dist-Name-ver.tar.gz> format in the standard out. + +=item --installdeps + +Installs the dependencies of the target distribution but won't build +itself. Handy if you want to try the application from a version +controlled repository such as git. + + cpanm --installdeps . + +=item --look + +Download and unpack the distribution and then open the directory with +your shell. Handy to poke around the source code or do manual +testing. + +=item -h, --help + +Displays the help message. + +=item -V, --version + +Displays the version number. + +=back + +=head1 OPTIONS + +You can specify the default options in C<PERL_CPANM_OPT> environment variable. + +=over 4 + +=item -f, --force + +Force install modules even when testing failed. + +=item -n, --notest + +Skip the testing of modules. Use this only when you just want to save +time for installing hundreds of distributions to the same perl and +architecture you've already tested to make sure it builds fine. + +Defaults to false, and you can say C<--no-notest> to override when it +is set in the default options in C<PERL_CPANM_OPT>. + +=item -S, --sudo + +Switch to the root user with C<sudo> when installing modules. Use this +if you want to install modules to the system perl include path. + +Defaults to false, and you can say C<--no-sudo> to override when it is +set in the default options in C<PERL_CPANM_OPT>. + +=item -v, --verbose + +Makes the output verbose. It also enables the interactive +configuration. (See --interactive) + +=item -q, --quiet + +Makes the output even more quiet than the default. It doesn't print +anything to the STDERR. + +=item -l, --local-lib + +Sets the L<local::lib> compatible path to install modules to. You +don't need to set this if you already configure the shell environment +variables using L<local::lib>, but this can be used to override that +as well. + +=item -L, --local-lib-contained + +Same with C<--local-lib> but when examining the dependencies, it +assumes no non-core modules are installed on the system. It's handy if +you want to bundle application dependencies in one directory so you +can distribute to other machines. + +For instance, + + cpanm -L extlib Plack + +would install Plack and all of its non-core dependencies into the +directory C<extlib>, which can be loaded from your application with: + + use local::lib '/path/to/extlib'; + +=item --mirror + +Specifies the base URL for the CPAN mirror to use, such as +C<http://cpan.cpantesters.org/> (you can omit the trailing slash). You +can specify multiple mirror URLs by repeating the command line option. + +Defaults to C<http://search.cpan.org/CPAN> which is a geo location +aware redirector. + +=item --mirror-only + +Download the mirror's 02packages.details.txt.gz index file instead of +querying the CPAN Meta DB. + +Select this option if you are using a local mirror of CPAN, such as +minicpan when you're offline, or your own CPAN index (a.k.a darkpan). + +B<Tip:> It might be useful if you name these mirror options with your +shell aliases, like: + + alias minicpanm='cpanm --mirror ~/minicpan --mirror-only' + alias darkpan='cpanm --mirror http://mycompany.example.com/DPAN --mirror-only' + +=item --mirror-index + +B<EXPERIMENTAL>: Specifies the file path to C<02packages.details.txt> +for module search index. + +=item --metacpan + +B<EXPERIMENTAL>: Use L<http://api.metacpan.org/> API for module lookup instead of +L<http://cpanmetadb.plackperl.org/>. + +=item --prompt + +Prompts when a test fails so that you can skip, force install, retry +or look in the shell to see what's going wrong. It also prompts when +one of the dependency failed if you want to proceed the installation. + +Defaults to false, and you can say C<--no-prompt> to override if it's +set in the default options in C<PERL_CPANM_OPT>. + +=item --reinstall + +cpanm, when given a module name in the command line (i.e. C<cpanm +Plack>), checks the locally installed version first and skips if it is +already installed. This option makes it skip the check, so: + + cpanm --reinstall Plack + +would reinstall L<Plack> even if your locally installed version is +latest, or even newer (which would happen if you install a developer +release from version control repositories). + +Defaults to false. + +=item --interactive + +Makes the configuration (such as C<Makefile.PL> and C<Build.PL>) +interactive, so you can answer questions in the distribution that +requires custom configuration or Task:: distributions. + +Defaults to false, and you can say C<--no-interactive> to override +when it's set in the default options in C<PERL_CPANM_OPT>. + +=item --scandeps + +Scans the depencencies of given modules and output the tree in a text +format. (See C<--format> below for more options) + +Because this command doesn't actually install any distributions, it +will be useful that by typing: + + cpanm --scandeps Catalyst::Runtime + +you can make sure what modules will be installed. + +This command takes into account which modules you already have +installed in your system. If you want to see what modules will be +installed against a vanilla perl installation, you might want to +combine it with C<-L> option. + +=item --format + +Determines what format to display the scanned dependency +tree. Available options are C<tree>, C<json>, C<yaml> and C<dists>. + +=over 8 + +=item tree + +Displays the tree in a plain text format. This is the default value. + +=item json, yaml + +Outputs the tree in a JSON or YAML format. L<JSON> and L<YAML> modules +need to be installed respectively. The output tree is represented as a +recursive tuple of: + + [ distribution, dependencies ] + +and the container is an array containing the root elements. Note that +there may be multiple root nodes, since you can give multiple modules +to the C<--scandeps> command. + +=item dists + +C<dists> is a special output format, where it prints the distribution +filename in the I<depth first order> after the dependency resolution, +like: + + GAAS/MIME-Base64-3.13.tar.gz + GAAS/URI-1.58.tar.gz + PETDANCE/HTML-Tagset-3.20.tar.gz + GAAS/HTML-Parser-3.68.tar.gz + GAAS/libwww-perl-5.837.tar.gz + +which means you can install these distributions in this order without +extra dependencies. When combined with C<-L> option, it will be useful +to replay installations on other machines. + +=back + +=item --save-dists + +Specifies the optional directory path to copy downloaded tarballs in +the CPAN mirror compatible directory structure +i.e. I<authors/id/A/AU/AUTHORS/Foo-Bar-version.tar.gz> + +=item --uninst-shadows + +Uninstalls the shadow files of the distribution that you're +installing. This eliminates the confusion if you're trying to install +core (dual-life) modules from CPAN against perl 5.10 or older, or +modules that used to be XS-based but switched to pure perl at some +version. + +If you run cpanm as root and use C<INSTALL_BASE> or equivalent to +specify custom installation path, you SHOULD disable this option so +you won't accidentally uninstall dual-life modules from the core +include path. + +Defaults to true if your perl version is smaller than 5.12, and you +can disable that with C<--no-uninst-shadows>. + +B<NOTE>: Since version 1.3000 this flag is turned off by default for +perl newer than 5.12, since with 5.12 @INC contains site_perl directory +I<before> the perl core library path, and uninstalling shadows is not +necessary anymore and does more harm by deleting files from the core +library path. + +=item --cascade-search + +B<EXPERIMENTAL>: Specifies whether to cascade search when you specify +multiple mirrors and a mirror has a lower version of the module than +requested. Defaults to false. + +=item --skip-installed + +Specifies whether a module given in the command line is skipped if its latest +version is already installed. Defaults to true. + +B<NOTE>: The C<PERL5LIB> environment variable have to be correctly set for this +to work with modules installed using L<local::lib>. + +=item --skip-satisfied + +B<EXPERIMENTAL>: Specifies whether a module (and version) given in the +command line is skipped if it's already installed. + +If you run: + + cpanm --skip-satisfied CGI DBI~1.2 + +cpanm won't install them if you already have CGI (for whatever +versions) or have DBI with version higher than 1.2. It is similar to +C<--skip-installed> but while C<--skip-installed> checks if the +I<latest> version of CPAN is installed, C<--skip-satisfied> checks if +a requested version (or not, which means any version) is installed. + +Defaults to false for bare module names, but if you specify versions +with C<~>, it will always skip satisfied requirements. + +=item --auto-cleanup + +Specifies the number of days in which cpanm's work directories +expire. Defaults to 7, which means old work directories will be +cleaned up in one week. + +You can set the value to C<0> to make cpan never cleanup those +directories. + +=item --man-pages + +Generates man pages for executables (man1) and libraries (man3). + +Defaults to false (no man pages generated) if +C<-L|--local-lib-contained> option is supplied. Otherwise, defaults to +true, and you can disable it with C<--no-man-pages>. + +=item --lwp + +Uses L<LWP> module to download stuff over HTTP. Defaults to true, and +you can say C<--no-lwp> to disable using LWP, when you want to upgrade +LWP from CPAN on some broken perl systems. + +=item --wget + +Uses GNU Wget (if available) to download stuff. Defaults to true, and +you can say C<--no-wget> to disable using Wget (versions of Wget older +than 1.9 don't support the C<--retry-connrefused> option used by cpanm). + +=item --curl + +Uses cURL (if available) to download stuff. Defaults to true, and +you can say C<--no-curl> to disable using cURL. + +Normally with C<--lwp>, C<--wget> and C<--curl> options set to true +(which is the default) cpanm tries L<LWP>, Wget, cURL and L<HTTP::Tiny> +(in that order) and uses the first one available. + +=back + +=head1 SEE ALSO + +L<App::cpanminus> + +=head1 COPYRIGHT + +Copyright 2010 Tatsuhiko Miyagawa. + +=head1 AUTHOR + +Tatsuhiko Miyagawa + +=cut diff --git a/bin/install_perl_modules b/bin/install_perl_modules new file mode 100755 index 000000000..0563baf96 --- /dev/null +++ b/bin/install_perl_modules @@ -0,0 +1,23 @@ +#!/bin/bash + +DIR="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd | sed -e 's/\/bin$//' )" + +$DIR/bin/cpanm -l local Carton + +export PATH=$DIR/local/bin:$PATH +export PERL5LIB=$DIR/local/lib/perl5 + +carton install --deployment + +perl -MImage::Magick -e 'exit()' >/dev/null 2>&1 + +HAVE_IM=$? + +if [ $HAVE_IM -ne 0 ] +then + read -p "Image::Magick is not installed. Do you want to attempt to install it?" yn + case $yn in + [Yy]* ) ./local/bin/carton install Image::Magick;; + * ) echo 'You will need to install it for FixMyStreet to work';; + esac +fi diff --git a/bin/make_css b/bin/make_css index 59acdb984..96c768acc 100755 --- a/bin/make_css +++ b/bin/make_css @@ -2,8 +2,8 @@ # # make_css: # Generate CSS files from SCSS files. -# Curerntly the CSS files are also in version control, though I guess -# in future they don't need to be, and compressed style could then be used. +# +# Requires sass which you can get from http://sass-lang.com/ # # Copyright (c) 2011 UK Citizens Online Democracy. All rights reserved. # Email: matthew@mysociety.org. WWW: http://www.mysociety.org diff --git a/bin/send-alerts b/bin/send-alerts index 4464b16e9..00c5426bc 100755 --- a/bin/send-alerts +++ b/bin/send-alerts @@ -1,4 +1,4 @@ -#!/usr/bin/env perl -w +#!/usr/bin/env perl # send-alerts: # Email alerts for FixMyStreet @@ -7,6 +7,7 @@ # Email: matthew@mysociety.org. WWW: http://www.mysociety.org use strict; +use warnings; require 5.8.0; use CGI; # XXX diff --git a/bin/send-questionnaires b/bin/send-questionnaires index 4910abc02..7ed3c87c2 100755 --- a/bin/send-questionnaires +++ b/bin/send-questionnaires @@ -1,4 +1,4 @@ -#!/usr/bin/env perl -w +#!/usr/bin/env perl # send-questionnaires: # Send out creator questionnaires @@ -7,6 +7,7 @@ # Email: matthew@mysociety.org. WWW: http://www.mysociety.org use strict; +use warnings; require 5.8.0; use CGI; # XXX Awkward kludge diff --git a/bin/send-reports b/bin/send-reports index e012cc1f0..22bd12732 100755 --- a/bin/send-reports +++ b/bin/send-reports @@ -1,4 +1,4 @@ -#!/usr/bin/env perl -w +#!/usr/bin/env perl # send-reports: # Send new problem reports to councils @@ -7,6 +7,7 @@ # Email: matthew@mysociety.org. WWW: http://www.mysociety.org use strict; +use warnings; require 5.8.0; use Digest::MD5; diff --git a/bin/update-all-reports b/bin/update-all-reports index c87977f68..4c4838c77 100755 --- a/bin/update-all-reports +++ b/bin/update-all-reports @@ -20,7 +20,7 @@ my $fourweeks = 4*7*24*60*60; my $problems = FixMyStreet::App->model("DB::Problem")->search( { - state => [ 'confirmed', 'fixed' ] + state => [ FixMyStreet::DB::Result::Problem->visible_states() ], }, { columns => [ @@ -52,10 +52,13 @@ while ( my @problem = $problems->next ) { my $type = ( $problem{duration} > 2 * $fourweeks ) ? 'unknown' : ($problem{age} > $fourweeks ? 'older' : 'new'); - # Fixed problems are either old or new - $fixed{$council}{$duration_str}++ if $problem{state} eq 'fixed'; - # Open problems are either unknown, older, or new - $open{$council}{$type}++ if $problem{state} eq 'confirmed'; + if (FixMyStreet::DB::Result::Problem->fixed_states()->{$problem{state}}) { + # Fixed problems are either old or new + $fixed{$council}{$duration_str}++ if FixMyStreet::DB::Result::Problem->fixed_states()->{$problem{state}}; + } else { + # Open problems are either unknown, older, or new + $open{$council}{$type}++ if $problem{state} eq 'confirmed'; + } } } diff --git a/blog/conf/general-example b/blog/conf/general-example new file mode 100644 index 000000000..dca1e9dcc --- /dev/null +++ b/blog/conf/general-example @@ -0,0 +1,27 @@ +<?php +/* + * general-example: + * Example values for the "general" config file. + * + * Configuration parameters, in PHP syntax. Configuration parameters are set + * using the PHP define('OPTION_...', '...') function. Both perl and PHP code + * parse this properly, so you can use comments and conditionals and whatnot, + * but unless essential it's better to keep it simple.... + * + * Copy this file to one called "general" in the same directory. Or + * have multiple config files and use a symlink to change between them. + * + * Copyright (c) 2005 UK Citizens Online Democracy. All rights reserved. + * Email: francis@mysociety.org; WWW: http://www.mysociety.org + * + * $Id: general-example,v 1.2 2010-01-28 00:47:37 francis Exp $ + * + */ + +// MySQL database for FMSBLOG mySociety WordPress +define('OPTION_FMSBLOG_DB_NAME', ''); +define('OPTION_FMSBLOG_DB_USER', ''); +define('OPTION_FMSBLOG_DB_PASS', ''); +define('OPTION_FMSBLOG_DB_HOST', ''); +define('OPTION_STAGING', '0'); + diff --git a/blog/conf/httpd.conf b/blog/conf/httpd.conf new file mode 100644 index 000000000..2f93bc3cc --- /dev/null +++ b/blog/conf/httpd.conf @@ -0,0 +1,18 @@ +# Apache configuration for code.fixmystreet.com. +# +# Copyright (c) 2012 UK Citizens Online Democracy. All rights reserved. +# Email: struan@mysociety.org; WWW: http://www.mysociety.org + +<Location /fcgi> + Options +ExecCGI + SetHandler fastcgi-script +</Location> + +RewriteEngine on +#RewriteLog /var/log/apache2/rewrite.log +#RewriteLogLevel 5 + +# PHP files can be referred without PHP +RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f +RewriteRule /(.+) /$1.php [PT] + diff --git a/blog/conf/wp-config.php b/blog/conf/wp-config.php new file mode 100644 index 000000000..38599b326 --- /dev/null +++ b/blog/conf/wp-config.php @@ -0,0 +1,46 @@ +<?php +/** WordPress's config file **/ +/** http://wordpress.org/ **/ + +// ** MySQL settings ** // +if (!@include "../conf/general") { + if (!@include "../../conf/general") { + if (!@include "../../../conf/general") { + if (!@include(dirname(__FILE__) . "../../../conf/general")) { + print "Error including conf/general in wp-config.php on code.fixmystreet.com WordPress"; + exit; + } + } + } +} +define('DB_NAME', OPTION_FMSBLOG_DB_NAME); // The name of the database +define('DB_USER', OPTION_FMSBLOG_DB_USER); // Your MySQL username +define('DB_PASSWORD', OPTION_FMSBLOG_DB_PASS); // ...and password +define('DB_HOST', OPTION_FMSBLOG_DB_HOST); // 99% chance you won't need to change this value + +// Change the prefix if you want to have multiple blogs in a single database. + +$table_prefix = 'wp_'; // example: 'wp_' or 'b2' or 'mylogin_' + +// Change this to localize WordPress. A corresponding MO file for the +// chosen language must be installed to wp-includes/languages. +// For example, install de.mo to wp-includes/languages and set WPLANG to 'de' +// to enable German language support. +define ('WPLANG', ''); + +$toppath = $_SERVER['DOCUMENT_ROOT']; +$trimmed = rtrim($toppath, "blog/web"); +define('TOP_PATH', $trimmed); + +/* Stop editing */ + +$server = DB_HOST; +$loginsql = DB_USER; +$passsql = DB_PASSWORD; +$base = DB_NAME; + +define('ABSPATH', dirname(__FILE__).'/'); + +// Get everything else +require_once(ABSPATH.'wp-settings.php'); +?> diff --git a/blog/web/.htaccess b/blog/web/.htaccess new file mode 100644 index 000000000..8d2ba9aa2 --- /dev/null +++ b/blog/web/.htaccess @@ -0,0 +1,11 @@ + +# BEGIN WordPress +<IfModule mod_rewrite.c> +RewriteEngine On +RewriteBase / +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule . /index.php [L] +</IfModule> + +# END WordPress diff --git a/blog/web/fcgi/php-basic b/blog/web/fcgi/php-basic new file mode 100755 index 000000000..f3034d9e2 --- /dev/null +++ b/blog/web/fcgi/php-basic @@ -0,0 +1,3 @@ +#!/bin/sh +PHP_FCGI_CHILDREN=1 PHPRC=/etc/php5/fcgi exec /usr/bin/php5-cgi + diff --git a/blog/web/index.php b/blog/web/index.php new file mode 100644 index 000000000..fbc0ef37f --- /dev/null +++ b/blog/web/index.php @@ -0,0 +1,6 @@ +<?php + +# Copy of the lines from WP main index.php, so it can be in subdirectory +define('WP_USE_THEMES', true); +require('./wp/wp-blog-header.php'); + diff --git a/carton.lock b/carton.lock new file mode 100644 index 000000000..bbee10724 --- /dev/null +++ b/carton.lock @@ -0,0 +1,25378 @@ +{ + "modules" : { + "App::cpanminus" : { + "dist" : "App-cpanminus-1.5006", + "module" : "App::cpanminus", + "mymeta" : { + "abstract" : "Get, unpack, build and install modules from CPAN.", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112621, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "App-cpanminus", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "ExtUtils::Install" : "1.46", + "ExtUtils::MakeMaker" : "6.31", + "Module::Build" : "0.36" + } + } + }, + "release_status" : "stable", + "version" : "1.5006" + }, + "name" : "App::cpanminus", + "pathname" : "M/MI/MIYAGAWA/App-cpanminus-1.5006.tar.gz", + "provides" : { + "App::cpanminus" : { + "file" : "App/cpanminus.pm", + "version" : "1.5006" + } + }, + "version" : "1.5006" + }, + "AppConfig" : { + "dist" : "AppConfig-1.66", + "module" : "AppConfig", + "mymeta" : { + "abstract" : "AppConfig is a bundle of Perl5 modules for reading configuration files and parsing command line arguments.", + "author" : [ + "Andy Wardley <abw@wardley.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.31, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "AppConfig", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "version" : "1.66" + }, + "name" : "AppConfig", + "pathname" : "/authors/id/A/AB/ABW/AppConfig-1.66.tar.gz", + "provides" : { + "AppConfig" : { + "file" : "AppConfig.pm", + "version" : "1.66" + }, + "AppConfig::Args" : { + "file" : "AppConfig/Args.pm", + "version" : "1.65" + }, + "AppConfig::CGI" : { + "file" : "AppConfig/CGI.pm", + "version" : "1.65" + }, + "AppConfig::File" : { + "file" : "AppConfig/File.pm", + "version" : "1.65" + }, + "AppConfig::Getopt" : { + "file" : "AppConfig/Getopt.pm", + "version" : "1.65" + }, + "AppConfig::State" : { + "file" : "AppConfig/State.pm", + "version" : "1.65" + }, + "AppConfig::Sys" : { + "file" : "AppConfig/Sys.pm", + "version" : "1.65" + } + }, + "version" : "1.66" + }, + "Archive::Zip" : { + "dist" : "Archive-Zip-1.30", + "module" : "Archive::Zip", + "mymeta" : { + "abstract" : "Provide an interface to ZIP archive files.", + "author" : [ + "Ned Konz <perl@bike-nomad.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.50, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Archive-Zip", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Compress::Raw::Zlib" : "2.017", + "File::Basename" : 0, + "File::Copy" : 0, + "File::Find" : 0, + "File::Path" : 0, + "File::Spec" : "0.80", + "File::Temp" : 0, + "IO::File" : 0, + "IO::Handle" : 0, + "IO::Seekable" : 0, + "Test::More" : "0.42", + "Time::Local" : 0, + "perl" : "5.00396" + } + } + }, + "release_status" : "stable", + "version" : "1.30" + }, + "name" : "Archive::Zip", + "pathname" : "/authors/id/A/AD/ADAMK/Archive-Zip-1.30.tar.gz", + "provides" : { + "Archive::Zip" : { + "file" : "Archive/Zip.pm", + "version" : "1.30" + }, + "Archive::Zip::Archive" : { + "file" : "Archive/Zip/Archive.pm", + "version" : "1.30" + }, + "Archive::Zip::BufferedFileHandle" : { + "file" : "Archive/Zip/BufferedFileHandle.pm", + "version" : "1.30" + }, + "Archive::Zip::DirectoryMember" : { + "file" : "Archive/Zip/DirectoryMember.pm", + "version" : "1.30" + }, + "Archive::Zip::FileMember" : { + "file" : "Archive/Zip/FileMember.pm", + "version" : "1.30" + }, + "Archive::Zip::Member" : { + "file" : "Archive/Zip/Member.pm", + "version" : "1.30" + }, + "Archive::Zip::MemberRead" : { + "file" : "Archive/Zip/MemberRead.pm", + "version" : "1.30" + }, + "Archive::Zip::MockFileHandle" : { + "file" : "Archive/Zip/MockFileHandle.pm", + "version" : "1.30" + }, + "Archive::Zip::NewFileMember" : { + "file" : "Archive/Zip/NewFileMember.pm", + "version" : "1.30" + }, + "Archive::Zip::StringMember" : { + "file" : "Archive/Zip/StringMember.pm", + "version" : "1.30" + }, + "Archive::Zip::Tree" : { + "file" : "Archive/Zip/Tree.pm", + "version" : "1.30" + }, + "Archive::Zip::ZipFileMember" : { + "file" : "Archive/Zip/ZipFileMember.pm", + "version" : "1.30" + } + }, + "version" : "1.30" + }, + "B::Hooks::EndOfScope" : { + "dist" : "B-Hooks-EndOfScope-0.09", + "module" : "B::Hooks::EndOfScope", + "mymeta" : { + "abstract" : "Execute code after a scope finished compilation", + "author" : [ + "Florian Ragwitz <rafl@debian.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 2.101241, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "B-Hooks-EndOfScope", + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.31" + } + }, + "runtime" : { + "recommends" : {}, + "requires" : { + "Sub::Exporter" : 0, + "Variable::Magic" : "0.34" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=B-Hooks-EndOfScope" + }, + "homepage" : "http://search.cpan.org/dist/B-Hooks-EndOfScope", + "repository" : { + "type" : "git", + "url" : "git://github.com/rafl/b-hooks-endofscope.git" + } + }, + "version" : "0.09", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@FLORA/@Filter/GatherDir", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@FLORA/@Filter/PruneCruft", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@FLORA/@Filter/ManifestSkip", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@FLORA/@Filter/MetaYAML", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@FLORA/@Filter/License", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@FLORA/@Filter/Readme", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@FLORA/@Filter/PkgVersion", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::PodCoverageTests", + "name" : "@FLORA/@Filter/PodCoverageTests", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@FLORA/@Filter/PodSyntaxTests", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@FLORA/@Filter/ExtraTests", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@FLORA/@Filter/ExecDir", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@FLORA/@Filter/ShareDir", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::MakeMaker", + "name" : "@FLORA/@Filter/MakeMaker", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@FLORA/@Filter/Manifest", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@FLORA/@Filter/ConfirmRelease", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@FLORA/@Filter/UploadToCPAN", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@FLORA/MetaConfig", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@FLORA/MetaJSON", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::MetaResources", + "name" : "@FLORA/MetaResources", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::Authority", + "name" : "@FLORA/Authority", + "version" : "0.01" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@FLORA/PodWeaver", + "version" : "3.100710" + }, + { + "class" : "Dist::Zilla::Plugin::AutoPrereq", + "name" : "@FLORA/AutoPrereq", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "2.101241" + } + ], + "zilla" : { + "class" : "Dist::Zilla", + "config" : { + "is_trial" : 0 + }, + "version" : "2.101241" + } + }, + "x_authority" : "cpan:FLORA" + }, + "name" : "B::Hooks::EndOfScope", + "pathname" : "F/FL/FLORA/B-Hooks-EndOfScope-0.09.tar.gz", + "provides" : { + "B::Hooks::EndOfScope" : { + "file" : "B/Hooks/EndOfScope.pm", + "version" : "0.09" + } + }, + "version" : "0.09" + }, + "CGI::Simple" : { + "dist" : "CGI-Simple-1.113", + "module" : "CGI::Simple::Cookie", + "mymeta" : { + "abstract" : "A Simple totally OO CGI interface that is CGI.pm compliant", + "author" : [ + "Andy Armstrong <andy@hexten.net>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "CGI-Simple", + "prereqs" : { + "configure" : { + "requires" : { + "Module::Build" : "0.36" + } + }, + "runtime" : { + "requires" : { + "IO::Scalar" : 0, + "Test::More" : 0 + } + } + }, + "provides" : { + "CGI::Simple" : { + "file" : "lib/CGI/Simple.pm", + "version" : "1.113" + }, + "CGI::Simple::Cookie" : { + "file" : "lib/CGI/Simple/Cookie.pm", + "version" : "1.113" + }, + "CGI::Simple::Standard" : { + "file" : "lib/CGI/Simple/Standard.pm", + "version" : "1.113" + }, + "CGI::Simple::Util" : { + "file" : "lib/CGI/Simple/Util.pm", + "version" : "1.113" + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=CGI-Simple" + }, + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://github.com/AndyA/CGI--Simple.git (fetch)" + } + }, + "version" : "1.113" + }, + "name" : "CGI::Simple", + "pathname" : "/authors/id/A/AN/ANDYA/CGI-Simple-1.113.tar.gz", + "provides" : { + "CGI::Simple" : { + "file" : "CGI/Simple.pm", + "version" : "1.113" + }, + "CGI::Simple::Cookie" : { + "file" : "CGI/Simple/Cookie.pm", + "version" : "1.113" + }, + "CGI::Simple::Standard" : { + "file" : "CGI/Simple/Standard.pm", + "version" : "1.113" + }, + "CGI::Simple::Util" : { + "file" : "CGI/Simple/Util.pm", + "version" : "1.113" + } + }, + "version" : "1.113" + }, + "CPAN::Checksums" : { + "dist" : "CPAN-Checksums-2.07", + "module" : "CPAN::Checksums", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.5705, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "CPAN-Checksums", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Compress::Bzip2" : 0, + "Compress::Zlib" : 0, + "Data::Compare" : 0, + "Data::Dumper" : 0, + "Digest::MD5" : "2.36", + "Digest::SHA" : 0, + "DirHandle" : 0, + "File::Spec" : 0, + "File::Temp" : 0, + "IO::File" : "1.14" + } + } + }, + "release_status" : "stable", + "version" : "2.07" + }, + "name" : "CPAN::Checksums", + "pathname" : "/authors/id/A/AN/ANDK/CPAN-Checksums-2.07.tar.gz", + "provides" : { + "CPAN::Checksums" : { + "file" : "CPAN/Checksums.pm", + "version" : "2.07" + } + }, + "version" : "2.07" + }, + "CPAN::DistnameInfo" : { + "dist" : "CPAN-DistnameInfo-0.12", + "module" : "CPAN::DistnameInfo", + "mymeta" : { + "abstract" : "Extract distribution name and version from a distribution filename", + "author" : [ + "Graham Barr <gbarr@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.48, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "CPAN-DistnameInfo", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gbarr/CPAN-DistnameInfo" + } + }, + "version" : "0.12" + }, + "name" : "CPAN::DistnameInfo", + "pathname" : "G/GB/GBARR/CPAN-DistnameInfo-0.12.tar.gz", + "provides" : { + "CPAN::DistnameInfo" : { + "file" : "CPAN/DistnameInfo.pm", + "version" : "0.12" + } + }, + "version" : "0.12" + }, + "CPAN::PackageDetails" : { + "dist" : "CPAN-PackageDetails-0.25", + "module" : "CPAN::PackageDetails", + "mymeta" : { + "abstract" : "Create or read PAUSE's 02packages.details.txt.gz", + "author" : [ + "brian d foy <bdfoy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.50, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "CPAN-PackageDetails", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "CPAN::DistnameInfo" : 0, + "IO::Compress::Gzip" : 0, + "IO::Uncompress::Gunzip" : 0, + "Test::More" : 0, + "Test::Output" : "0.10", + "version" : "0.78" + } + } + }, + "release_status" : "stable", + "version" : "0.25" + }, + "name" : "CPAN::PackageDetails", + "pathname" : "/authors/id/B/BD/BDFOY/CPAN-PackageDetails-0.25.tar.gz", + "provides" : { + "CPAN::PackageDetails" : { + "file" : "CPAN/PackageDetails.pm", + "version" : "0.25" + }, + "CPAN::PackageDetails::Entries" : { + "file" : "CPAN/PackageDetails/Entries.pm", + "version" : "0.25" + }, + "CPAN::PackageDetails::Entry" : { + "file" : "CPAN/PackageDetails/Entry.pm", + "version" : "0.25" + }, + "CPAN::PackageDetails::Header" : { + "file" : "CPAN/PackageDetails/Header.pm", + "version" : "0.25" + } + }, + "version" : "0.25" + }, + "Cache::Memcached" : { + "dist" : "Cache-Memcached-1.29", + "module" : "Cache::Memcached", + "mymeta" : { + "abstract" : "client library for memcached (memory cache daemon)", + "author" : [ + "Brad Fitzpatrick <brad@danga.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.55_02, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Cache-Memcached", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Encode" : 0, + "Storable" : 0, + "String::CRC32" : 0, + "Time::HiRes" : 0 + } + } + }, + "release_status" : "stable", + "version" : "1.29" + }, + "name" : "Cache::Memcached", + "pathname" : "D/DO/DORMANDO/Cache-Memcached-1.29.tar.gz", + "provides" : { + "Cache::Memcached" : { + "file" : "Cache/Memcached.pm", + "version" : "1.29" + }, + "Cache::Memcached::GetParser" : { + "file" : "Cache/Memcached/GetParser.pm" + } + }, + "version" : "1.29" + }, + "Carp::Assert" : { + "dist" : "Carp-Assert-0.20", + "module" : "Carp::Assert", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.31, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Carp-Assert", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Test::More" : "0.4" + } + } + }, + "release_status" : "stable", + "version" : "0.20" + }, + "name" : "Carp::Assert", + "pathname" : "M/MS/MSCHWERN/Carp-Assert-0.20.tar.gz", + "provides" : { + "Carp::Assert" : { + "file" : "Carp/Assert.pm", + "version" : "0.20" + } + }, + "version" : "0.20" + }, + "Carp::Assert::More" : { + "dist" : "Carp-Assert-More-1.12", + "module" : "Carp::Assert::More", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.30, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Carp-Assert-More", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Carp::Assert" : 0, + "Scalar::Util" : 0, + "Test::Exception" : 0, + "Test::More" : "0.18" + } + } + }, + "release_status" : "stable", + "version" : "1.12", + "x_installdirs" : "site", + "x_version_from" : "More.pm" + }, + "name" : "Carp::Assert::More", + "pathname" : "P/PE/PETDANCE/Carp-Assert-More-1.12.tar.gz", + "provides" : { + "Carp::Assert::More" : { + "file" : "Carp/Assert/More.pm", + "version" : "1.12" + } + }, + "version" : "1.12" + }, + "Carp::Clan" : { + "dist" : "Carp-Clan-6.04", + "module" : "Carp::Clan", + "mymeta" : { + "abstract" : "Report errors from perspective of caller of a \"clan\" of modules", + "author" : [ + "Steffen Beyer <STBEY@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.42, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Carp-Clan", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::Exception" : 0 + } + } + }, + "release_status" : "stable", + "version" : "6.04" + }, + "name" : "Carp::Clan", + "pathname" : "S/ST/STBEY/Carp-Clan-6.04.tar.gz", + "provides" : { + "Carp::Clan" : { + "file" : "Carp/Clan.pm", + "version" : "6.04" + } + }, + "version" : "6.04" + }, + "Catalyst::Action::RenderView" : { + "dist" : "Catalyst-Action-RenderView-0.16", + "module" : "Catalyst::Action::RenderView", + "mymeta" : { + "abstract" : "Sensible default end action.", + "author" : [ + "Marcus Ramberg <marcus@thefeed.no>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.91, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Action-RenderView", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "HTTP::Request::AsCGI" : 0, + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst::Runtime" : "5.80030", + "Data::Visitor" : "0.24", + "MRO::Compat" : 0, + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Action-RenderView/trunk/" + } + }, + "version" : "0.16" + }, + "name" : "Catalyst::Action::RenderView", + "pathname" : "B/BO/BOBTFISH/Catalyst-Action-RenderView-0.16.tar.gz", + "provides" : { + "Catalyst::Action::RenderView" : { + "file" : "Catalyst/Action/RenderView.pm", + "version" : "0.16" + } + }, + "version" : "0.16" + }, + "Catalyst::Authentication::Store::DBIx::Class" : { + "dist" : "Catalyst-Authentication-Store-DBIx-Class-0.1503", + "module" : "Catalyst::Authentication::Store::DBIx::Class", + "mymeta" : { + "abstract" : "A storage class for Catalyst Authentication using DBIx::Class", + "author" : [ + "Jason Kuri (jayk@cpan.org)" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.02, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Authentication-Store-DBIx-Class", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst::Model::DBIC::Schema" : "0.18", + "Catalyst::Plugin::Authentication" : "0.10008", + "Catalyst::Runtime" : "5.8", + "DBIx::Class" : "0.08", + "List::MoreUtils" : 0, + "Moose" : 0, + "Test::More" : 0, + "Try::Tiny" : 0, + "namespace::autoclean" : 0, + "perl" : "5.008001" + } + } + }, + "provides" : { + "Catalyst::Authentication::Realm::SimpleDB" : { + "file" : "lib/Catalyst/Authentication/Realm/SimpleDB.pm", + "version" : 0 + }, + "Catalyst::Authentication::Store::DBIx::Class" : { + "file" : "lib/Catalyst/Authentication/Store/DBIx/Class.pm", + "version" : "0.1503" + }, + "Catalyst::Authentication::Store::DBIx::Class::User" : { + "file" : "lib/Catalyst/Authentication/Store/DBIx/Class/User.pm", + "version" : 0 + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://git.shadowcat.co.uk/catagits/Catalyst-Authentication-Store-DBIx-Class.git" + } + }, + "version" : "0.1503" + }, + "name" : "Catalyst::Authentication::Store::DBIx::Class", + "pathname" : "B/BO/BOBTFISH/Catalyst-Authentication-Store-DBIx-Class-0.1503.tar.gz", + "provides" : { + "Catalyst::Authentication::Realm::SimpleDB" : { + "file" : "Catalyst/Authentication/Realm/SimpleDB.pm" + }, + "Catalyst::Authentication::Store::DBIx::Class" : { + "file" : "Catalyst/Authentication/Store/DBIx/Class.pm", + "version" : "0.1503" + }, + "Catalyst::Authentication::Store::DBIx::Class::User" : { + "file" : "Catalyst/Authentication/Store/DBIx/Class/User.pm" + } + }, + "version" : "0.1503" + }, + "Catalyst::Component::InstancePerContext" : { + "dist" : "Catalyst-Component-InstancePerContext-0.001001", + "module" : "Catalyst::Component::InstancePerContext", + "mymeta" : { + "abstract" : "Moose role to create only one instance of component per context", + "author" : [ + "Guillermo Roditi (groditi) <groditi@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.67, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Component-InstancePerContext", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Catalyst" : 0, + "Moose" : 0, + "Scalar::Util" : 0, + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.001001" + }, + "name" : "Catalyst::Component::InstancePerContext", + "pathname" : "G/GR/GRODITI/Catalyst-Component-InstancePerContext-0.001001.tar.gz", + "provides" : { + "Catalyst::Component::InstancePerContext" : { + "file" : "Catalyst/Component/InstancePerContext.pm", + "version" : "0.001001" + } + }, + "version" : "0.001001" + }, + "Catalyst::Model::Adaptor" : { + "dist" : "Catalyst-Model-Adaptor-0.10", + "module" : "Catalyst::Model::Adaptor", + "mymeta" : { + "abstract" : "use a plain class as a Catalyst model", + "author" : [ + "Jonathan Rockway C<< <jrockway@cpan.org> >>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.99, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Model-Adaptor", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::More" : 0, + "ok" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst::Runtime" : 0, + "MRO::Compat" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://github.com/bobtfish/catalyst-model-adaptor.git" + } + }, + "version" : "0.10" + }, + "name" : "Catalyst::Model::Adaptor", + "pathname" : "/authors/id/B/BO/BOBTFISH/Catalyst-Model-Adaptor-0.10.tar.gz", + "provides" : { + "Catalyst::Helper::Model::Adaptor" : { + "file" : "Catalyst/Helper/Model/Adaptor.pm" + }, + "Catalyst::Helper::Model::Factory" : { + "file" : "Catalyst/Helper/Model/Factory.pm" + }, + "Catalyst::Helper::Model::Factory::PerRequest" : { + "file" : "Catalyst/Helper/Model/Factory/PerRequest.pm" + }, + "Catalyst::Model::Adaptor" : { + "file" : "Catalyst/Model/Adaptor.pm", + "version" : "0.10" + }, + "Catalyst::Model::Adaptor::Base" : { + "file" : "Catalyst/Model/Adaptor/Base.pm" + }, + "Catalyst::Model::Factory" : { + "file" : "Catalyst/Model/Factory.pm", + "version" : "0.10" + }, + "Catalyst::Model::Factory::PerRequest" : { + "file" : "Catalyst/Model/Factory/PerRequest.pm", + "version" : "0.10" + } + }, + "version" : "0.10" + }, + "Catalyst::Model::DBIC::Schema" : { + "dist" : "Catalyst-Model-DBIC-Schema-0.59", + "module" : "Catalyst::Model::DBIC::Schema", + "mymeta" : { + "abstract" : "DBIx::Class::Schema Model Class", + "author" : [ + "Brandon L Black C<blblack at gmail.com>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.02, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Model-DBIC-Schema", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "DBD::SQLite" : 0, + "ExtUtils::MakeMaker" : "6.42", + "Storable" : 0, + "Test::Exception" : 0, + "Test::More" : "0.94", + "Test::Requires" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Carp::Clan" : 0, + "Catalyst::Component::InstancePerContext" : 0, + "Catalyst::Runtime" : "5.80005", + "CatalystX::Component::Traits" : "0.14", + "DBD::SQLite" : 0, + "DBIx::Class" : "0.08114", + "List::MoreUtils" : 0, + "Moose" : "1.12", + "MooseX::Types" : 0, + "Storable" : 0, + "Test::Exception" : 0, + "Test::More" : "0.94", + "Test::Requires" : 0, + "Tie::IxHash" : 0, + "Try::Tiny" : 0, + "namespace::autoclean" : "0.09", + "namespace::clean" : 0, + "perl" : "5.008001" + } + } + }, + "provides" : { + "Catalyst::Helper::Model::DBIC::Schema" : { + "file" : "lib/Catalyst/Helper/Model/DBIC/Schema.pm", + "version" : "0.59" + }, + "Catalyst::Model::DBIC::Schema" : { + "file" : "lib/Catalyst/Model/DBIC/Schema.pm", + "version" : "0.59" + }, + "Catalyst::TraitFor::Model::DBIC::Schema::Caching" : { + "file" : "lib/Catalyst/TraitFor/Model/DBIC/Schema/Caching.pm", + "version" : 0 + }, + "Catalyst::TraitFor::Model::DBIC::Schema::PerRequestSchema" : { + "file" : "lib/Catalyst/TraitFor/Model/DBIC/Schema/PerRequestSchema.pm", + "version" : 0 + }, + "Catalyst::TraitFor::Model::DBIC::Schema::Replicated" : { + "file" : "lib/Catalyst/TraitFor/Model/DBIC/Schema/Replicated.pm", + "version" : 0 + }, + "Catalyst::TraitFor::Model::DBIC::Schema::SchemaProxy" : { + "file" : "lib/Catalyst/TraitFor/Model/DBIC/Schema/SchemaProxy.pm", + "version" : 0 + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://git.shadowcat.co.uk/catagits/Catalyst-Model-DBIC-Schema.git" + } + }, + "version" : "0.59" + }, + "name" : "Catalyst::Model::DBIC::Schema", + "pathname" : "R/RK/RKITOVER/Catalyst-Model-DBIC-Schema-0.59.tar.gz", + "provides" : { + "Catalyst::Helper::Model::DBIC::Schema" : { + "file" : "Catalyst/Helper/Model/DBIC/Schema.pm", + "version" : "0.59" + }, + "Catalyst::Model::DBIC::Schema" : { + "file" : "Catalyst/Model/DBIC/Schema.pm", + "version" : "0.59" + }, + "Catalyst::TraitFor::Model::DBIC::Schema::Caching" : { + "file" : "Catalyst/TraitFor/Model/DBIC/Schema/Caching.pm" + }, + "Catalyst::TraitFor::Model::DBIC::Schema::PerRequestSchema" : { + "file" : "Catalyst/TraitFor/Model/DBIC/Schema/PerRequestSchema.pm" + }, + "Catalyst::TraitFor::Model::DBIC::Schema::Replicated" : { + "file" : "Catalyst/TraitFor/Model/DBIC/Schema/Replicated.pm" + }, + "Catalyst::TraitFor::Model::DBIC::Schema::SchemaProxy" : { + "file" : "Catalyst/TraitFor/Model/DBIC/Schema/SchemaProxy.pm" + } + }, + "version" : "0.59" + }, + "Catalyst::Plugin::Authentication" : { + "dist" : "Catalyst-Plugin-Authentication-0.10017", + "module" : "Catalyst::Plugin::Authentication", + "mymeta" : { + "abstract" : "Infrastructure plugin for the Catalyst", + "author" : [ + "Yuval Kogman, C<nothingmuch@woobling.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.99, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Plugin-Authentication", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Class::MOP" : 0, + "ExtUtils::MakeMaker" : "6.42", + "Moose" : 0, + "Test::Exception" : 0, + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst::Plugin::Session" : "0.10", + "Catalyst::Runtime" : 0, + "Class::Inspector" : 0, + "Class::MOP" : 0, + "MRO::Compat" : 0, + "Moose" : 0, + "Test::Exception" : 0, + "Test::More" : "0.88", + "perl" : "5.008001" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Plugin-Authentication/0.10000/trunk" + } + }, + "version" : "0.10017" + }, + "name" : "Catalyst::Plugin::Authentication", + "pathname" : "/authors/id/B/BO/BOBTFISH/Catalyst-Plugin-Authentication-0.10017.tar.gz", + "provides" : { + "Catalyst::Authentication::Credential::Password" : { + "file" : "Catalyst/Authentication/Credential/Password.pm" + }, + "Catalyst::Authentication::Credential::Remote" : { + "file" : "Catalyst/Authentication/Credential/Remote.pm" + }, + "Catalyst::Authentication::Realm" : { + "file" : "Catalyst/Authentication/Realm.pm" + }, + "Catalyst::Authentication::Realm::Compatibility" : { + "file" : "Catalyst/Authentication/Realm/Compatibility.pm" + }, + "Catalyst::Authentication::Realm::Progressive" : { + "file" : "Catalyst/Authentication/Realm/Progressive.pm" + }, + "Catalyst::Authentication::Store::Minimal" : { + "file" : "Catalyst/Authentication/Store/Minimal.pm" + }, + "Catalyst::Authentication::Store::Null" : { + "file" : "Catalyst/Authentication/Store/Null.pm" + }, + "Catalyst::Authentication::User" : { + "file" : "Catalyst/Authentication/User.pm" + }, + "Catalyst::Authentication::User::Hash" : { + "file" : "Catalyst/Authentication/User/Hash.pm" + }, + "Catalyst::Plugin::Authentication" : { + "file" : "Catalyst/Plugin/Authentication.pm", + "version" : "0.10017" + }, + "Catalyst::Plugin::Authentication::Credential::Password" : { + "file" : "Catalyst/Plugin/Authentication/Credential/Password.pm" + }, + "Catalyst::Plugin::Authentication::Store::Minimal" : { + "file" : "Catalyst/Plugin/Authentication/Store/Minimal.pm" + }, + "Catalyst::Plugin::Authentication::User" : { + "file" : "Catalyst/Plugin/Authentication/User.pm" + }, + "Catalyst::Plugin::Authentication::User::Hash" : { + "file" : "Catalyst/Plugin/Authentication/User/Hash.pm" + } + }, + "version" : "0.10017" + }, + "Catalyst::Plugin::Session" : { + "dist" : "Catalyst-Plugin-Session-0.31", + "module" : "Catalyst::Plugin::Session", + "mymeta" : { + "abstract" : "Generic Session plugin - ties together server side storage and client side state required to maintain session data.", + "author" : [ + "Andy Grundman" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.99, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Plugin-Session", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::Deep" : 0, + "Test::Exception" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst::Runtime" : "5.71001", + "Digest" : 0, + "File::Spec" : 0, + "File::Temp" : 0, + "MRO::Compat" : 0, + "Moose" : "0.76", + "MooseX::Emulate::Class::Accessor::Fast" : "0.00801", + "Object::Signature" : 0, + "Test::More" : "0.88", + "Tie::RefHash" : "1.34", + "namespace::clean" : "0.10", + "perl" : "5.008" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Plugin-Session/0.00/trunk/" + } + }, + "version" : "0.31" + }, + "name" : "Catalyst::Plugin::Session", + "pathname" : "/authors/id/B/BO/BOBTFISH/Catalyst-Plugin-Session-0.31.tar.gz", + "provides" : { + "Catalyst::Plugin::Session" : { + "file" : "Catalyst/Plugin/Session.pm", + "version" : "0.31" + }, + "Catalyst::Plugin::Session::State" : { + "file" : "Catalyst/Plugin/Session/State.pm" + }, + "Catalyst::Plugin::Session::Store" : { + "file" : "Catalyst/Plugin/Session/Store.pm" + }, + "Catalyst::Plugin::Session::Store::Dummy" : { + "file" : "Catalyst/Plugin/Session/Store/Dummy.pm" + }, + "Catalyst::Plugin::Session::Test::Store" : { + "file" : "Catalyst/Plugin/Session/Test/Store.pm", + "version" : "123" + } + }, + "version" : "0.31" + }, + "Catalyst::Plugin::Session::State::Cookie" : { + "dist" : "Catalyst-Plugin-Session-State-Cookie-0.17", + "module" : "Catalyst::Plugin::Session::State::Cookie", + "mymeta" : { + "abstract" : "Maintain session IDs using cookies.", + "author" : [ + "Yuval Kogman <nothingmuch@woobling.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.91, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Plugin-Session-State-Cookie", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst" : "5.80005", + "Catalyst::Plugin::Session" : "0.27", + "ExtUtils::MakeMaker" : "6.42", + "MRO::Compat" : 0, + "Moose" : 0, + "Test::More" : 0, + "namespace::autoclean" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Plugin-Session-State-Cookie/trunk/" + } + }, + "version" : "0.17" + }, + "name" : "Catalyst::Plugin::Session::State::Cookie", + "pathname" : "M/MS/MSTROUT/Catalyst-Plugin-Session-State-Cookie-0.17.tar.gz", + "provides" : { + "Catalyst::Plugin::Session::State::Cookie" : { + "file" : "Catalyst/Plugin/Session/State/Cookie.pm", + "version" : "0.17" + } + }, + "version" : "0.17" + }, + "Catalyst::Plugin::Session::Store::DBIC" : { + "dist" : "Catalyst-Plugin-Session-Store-DBIC-0.12", + "module" : "Catalyst::Plugin::Session::Store::DBIC", + "mymeta" : { + "abstract" : "Store your sessions via DBIx::Class", + "author" : [ + "Daniel Westermann-Clark <danieltwc@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.57_05, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Plugin-Session-Store-DBIC", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Catalyst" : "5.65", + "Catalyst::Exception" : 0, + "Catalyst::Plugin::Session::Store::Delegate" : "0.05", + "Class::Accessor::Fast" : 0, + "DBIx::Class" : "0.07000", + "FindBin" : 0, + "MIME::Base64" : 0, + "MRO::Compat" : 0, + "Scalar::Util" : 0, + "Storable" : 0, + "Test::More" : 0, + "Test::Warn" : "0.20" + } + } + }, + "release_status" : "stable", + "version" : "0.12", + "x_repository" : "http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Plugin-Session-Store-DBIC/" + }, + "name" : "Catalyst::Plugin::Session::Store::DBIC", + "pathname" : "F/FL/FLORA/Catalyst-Plugin-Session-Store-DBIC-0.12.tar.gz", + "provides" : { + "Catalyst::Plugin::Session::Store::DBIC" : { + "file" : "Catalyst/Plugin/Session/Store/DBIC.pm", + "version" : "0.12" + }, + "Catalyst::Plugin::Session::Store::DBIC::Delegate" : { + "file" : "Catalyst/Plugin/Session/Store/DBIC/Delegate.pm" + } + }, + "version" : "0.12" + }, + "Catalyst::Plugin::Session::Store::Delegate" : { + "dist" : "Catalyst-Plugin-Session-Store-Delegate-0.06", + "module" : "Catalyst::Plugin::Session::Store::Delegate", + "mymeta" : { + "abstract" : "Delegate session storage to an", + "author" : [ + "Yuval Kogman, C<nothingmuch@woobling.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.91, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Plugin-Session-Store-Delegate", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst::Plugin::Session" : "0.27", + "ExtUtils::MakeMaker" : "6.42", + "MRO::Compat" : 0, + "Moose" : 0, + "MooseX::Emulate::Class::Accessor::Fast" : 0, + "Test::More" : 0, + "Test::use::ok" : 0, + "namespace::clean" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Plugin-Session-Store-Delegate/" + } + }, + "version" : "0.06", + "x_module_name" : "Catalyst::Plugin::Session::Store::Delegate" + }, + "name" : "Catalyst::Plugin::Session::Store::Delegate", + "pathname" : "/authors/id/B/BO/BOBTFISH/Catalyst-Plugin-Session-Store-Delegate-0.06.tar.gz", + "provides" : { + "Catalyst::Plugin::Session::Store::Delegate" : { + "file" : "Catalyst/Plugin/Session/Store/Delegate.pm", + "version" : "0.06" + } + }, + "version" : "0.06" + }, + "Catalyst::Plugin::SmartURI" : { + "dist" : "Catalyst-Plugin-SmartURI-0.036", + "module" : "Catalyst::Plugin::SmartURI", + "mymeta" : { + "abstract" : "Configurable URIs for Catalyst", + "author" : [ + "Rafael Kitover <rkitover@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.91, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Plugin-SmartURI", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst" : "5.80002", + "Class::C3::Componentised" : 0, + "ExtUtils::MakeMaker" : "6.42", + "Moose" : 0, + "Task::Weaken" : 0, + "Test::More" : 0, + "URI::SmartURI" : 0, + "namespace::clean" : 0, + "parent" : 0 + } + } + }, + "provides" : { + "Catalyst::Plugin::SmartURI" : { + "file" : "lib/Catalyst/Plugin/SmartURI.pm", + "version" : "0.036" + }, + "Catalyst::Request::SmartURI" : { + "file" : "lib/Catalyst/Plugin/SmartURI.pm", + "version" : 0 + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Plugin-SmartURI/1.000/trunk/" + } + }, + "version" : "0.036" + }, + "name" : "Catalyst::Plugin::SmartURI", + "pathname" : "R/RK/RKITOVER/Catalyst-Plugin-SmartURI-0.036.tar.gz", + "provides" : { + "Catalyst::Plugin::SmartURI" : { + "file" : "Catalyst/Plugin/SmartURI.pm", + "version" : "0.036" + }, + "Catalyst::Request::SmartURI" : { + "file" : "Catalyst/Plugin/SmartURI.pm" + } + }, + "version" : "0.036" + }, + "Catalyst::Plugin::Static::Simple" : { + "dist" : "Catalyst-Plugin-Static-Simple-0.29", + "module" : "Catalyst::Plugin::Static::Simple", + "mymeta" : { + "abstract" : "Make serving static pages painless.", + "author" : [ + "Andy Grundman, <andy@hybridized.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.91, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Plugin-Static-Simple", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst::Runtime" : "5.80008", + "ExtUtils::MakeMaker" : "6.42", + "MIME::Types" : "1.25", + "Moose" : 0, + "MooseX::Types" : 0, + "Test::More" : 0, + "namespace::autoclean" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Plugin-Static-Simple/trunk/" + } + }, + "version" : "0.29" + }, + "name" : "Catalyst::Plugin::Static::Simple", + "pathname" : "M/MS/MSTROUT/Catalyst-Plugin-Static-Simple-0.29.tar.gz", + "provides" : { + "Catalyst::Plugin::Static::Simple" : { + "file" : "Catalyst/Plugin/Static/Simple.pm", + "version" : "0.29" + } + }, + "version" : "0.29" + }, + "Catalyst::Plugin::Unicode" : { + "dist" : "Catalyst-Plugin-Unicode-0.93", + "module" : "Catalyst::Plugin::Unicode", + "mymeta" : { + "abstract" : "Unicode aware Catalyst (old style)", + "author" : [ + "Tomas Doran <bobtfish@bobtfish.net>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.910, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Plugin-Unicode", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst::Runtime" : "5.70", + "ExtUtils::MakeMaker" : "6.42", + "IO::Scalar" : 0, + "MRO::Compat" : "0.10", + "Test::More" : 0, + "Test::WWW::Mechanize::Catalyst" : 0, + "ok" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/trunk/Catalyst-Plugin-Unicode/" + } + }, + "version" : "0.93" + }, + "name" : "Catalyst::Plugin::Unicode", + "pathname" : "/authors/id/B/BO/BOBTFISH/Catalyst-Plugin-Unicode-0.93.tar.gz", + "provides" : { + "Catalyst::Plugin::Unicode" : { + "file" : "Catalyst/Plugin/Unicode.pm", + "version" : "0.93" + } + }, + "version" : "0.93" + }, + "Catalyst::Plugin::Unicode::Encoding" : { + "dist" : "Catalyst-Plugin-Unicode-Encoding-1.1", + "module" : "Catalyst::Plugin::Unicode::Encoding", + "mymeta" : { + "abstract" : "Unicode aware Catalyst", + "author" : [ + "Christian Hansen, C<ch@ngmedia.com>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.99, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Plugin-Unicode-Encoding", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "IO::Scalar" : 0, + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst" : "5.80", + "Encode" : "2.21", + "LWP" : "5.828", + "URI" : "1.36" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Plugin-Unicode-Encoding/" + } + }, + "version" : "1.1", + "x_module_name" : "Catalyst::Plugin::Unicode::Encoding" + }, + "name" : "Catalyst::Plugin::Unicode::Encoding", + "pathname" : "/authors/id/B/BO/BOBTFISH/Catalyst-Plugin-Unicode-Encoding-1.1.tar.gz", + "provides" : { + "Catalyst::Plugin::Unicode::Encoding" : { + "file" : "Catalyst/Plugin/Unicode/Encoding.pm", + "version" : "1.1" + } + }, + "version" : "1.1" + }, + "Catalyst::Runtime" : { + "dist" : "Catalyst-Runtime-5.80032", + "module" : "Catalyst::Runtime", + "mymeta" : { + "abstract" : "The Catalyst Framework Runtime", + "author" : [ + "Catalyst Contributors, see Catalyst.pm" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.99, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-Runtime", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Class::Data::Inheritable" : 0, + "ExtUtils::MakeMaker" : "6.42", + "Test::Exception" : 0, + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "B::Hooks::EndOfScope" : "0.08", + "CGI::Simple::Cookie" : "1.109", + "Carp" : 0, + "Class::C3::Adopt::NEXT" : "0.07", + "Class::Data::Inheritable" : 0, + "Class::MOP" : "0.95", + "Data::Dump" : 0, + "Data::OptList" : 0, + "HTML::Entities" : 0, + "HTML::HeadParser" : 0, + "HTTP::Body" : "1.06", + "HTTP::Headers" : "1.64", + "HTTP::Request" : "5.814", + "HTTP::Request::AsCGI" : "1.0", + "HTTP::Response" : "5.813", + "LWP::UserAgent" : 0, + "List::MoreUtils" : 0, + "MRO::Compat" : 0, + "Module::Pluggable" : "3.9", + "Moose" : "1.03", + "MooseX::Emulate::Class::Accessor::Fast" : "0.00903", + "MooseX::Getopt" : "0.30", + "MooseX::MethodAttributes::Inheritable" : "0.24", + "MooseX::Role::WithOverloading" : "0.09", + "MooseX::Types" : 0, + "MooseX::Types::Common::Numeric" : 0, + "Path::Class" : "0.09", + "Scalar::Util" : 0, + "String::RewritePrefix" : "0.004", + "Sub::Exporter" : 0, + "Task::Weaken" : 0, + "Test::Exception" : 0, + "Test::More" : "0.88", + "Text::Balanced" : 0, + "Text::SimpleTable" : "0.03", + "Time::HiRes" : 0, + "Tree::Simple" : "1.15", + "Tree::Simple::Visitor::FindByPath" : 0, + "URI" : "1.35", + "namespace::autoclean" : "0.09", + "namespace::clean" : "0.13", + "perl" : "5.008004" + } + } + }, + "release_status" : "stable", + "resources" : { + "homepage" : "http://dev.catalyst.perl.org/", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Runtime/" + }, + "x_IRC" : "irc://irc.perl.org/#catalyst", + "x_MailingList" : "http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst" + }, + "version" : "5.80032" + }, + "name" : "Catalyst::Runtime", + "pathname" : "/authors/id/B/BO/BOBTFISH/Catalyst-Runtime-5.80032.tar.gz", + "provides" : { + "Catalyst" : { + "file" : "Catalyst.pm", + "version" : "5.80032" + }, + "Catalyst::Action" : { + "file" : "Catalyst/Action.pm" + }, + "Catalyst::ActionChain" : { + "file" : "Catalyst/ActionChain.pm" + }, + "Catalyst::ActionContainer" : { + "file" : "Catalyst/ActionContainer.pm" + }, + "Catalyst::Base" : { + "file" : "Catalyst/Base.pm" + }, + "Catalyst::ClassData" : { + "file" : "Catalyst/ClassData.pm" + }, + "Catalyst::Component" : { + "file" : "Catalyst/Component.pm" + }, + "Catalyst::Component::ApplicationAttribute" : { + "file" : "Catalyst/Component/ApplicationAttribute.pm" + }, + "Catalyst::Component::ContextClosure" : { + "file" : "Catalyst/Component/ContextClosure.pm" + }, + "Catalyst::Controller" : { + "file" : "Catalyst/Controller.pm" + }, + "Catalyst::DispatchType" : { + "file" : "Catalyst/DispatchType.pm" + }, + "Catalyst::DispatchType::Chained" : { + "file" : "Catalyst/DispatchType/Chained.pm" + }, + "Catalyst::DispatchType::Default" : { + "file" : "Catalyst/DispatchType/Default.pm" + }, + "Catalyst::DispatchType::Index" : { + "file" : "Catalyst/DispatchType/Index.pm" + }, + "Catalyst::DispatchType::Path" : { + "file" : "Catalyst/DispatchType/Path.pm" + }, + "Catalyst::DispatchType::Regex" : { + "file" : "Catalyst/DispatchType/Regex.pm" + }, + "Catalyst::Dispatcher" : { + "file" : "Catalyst/Dispatcher.pm" + }, + "Catalyst::Engine" : { + "file" : "Catalyst/Engine.pm" + }, + "Catalyst::Engine::CGI" : { + "file" : "Catalyst/Engine/CGI.pm" + }, + "Catalyst::Engine::FastCGI" : { + "file" : "Catalyst/Engine/FastCGI.pm" + }, + "Catalyst::Engine::HTTP" : { + "file" : "Catalyst/Engine/HTTP.pm" + }, + "Catalyst::Exception" : { + "file" : "Catalyst/Exception.pm" + }, + "Catalyst::Exception::Base" : { + "file" : "Catalyst/Exception.pm" + }, + "Catalyst::Exception::Basic" : { + "file" : "Catalyst/Exception/Basic.pm" + }, + "Catalyst::Exception::Detach" : { + "file" : "Catalyst/Exception/Detach.pm" + }, + "Catalyst::Exception::Go" : { + "file" : "Catalyst/Exception/Go.pm" + }, + "Catalyst::Exception::Interface" : { + "file" : "Catalyst/Exception/Interface.pm" + }, + "Catalyst::Log" : { + "file" : "Catalyst/Log.pm" + }, + "Catalyst::Model" : { + "file" : "Catalyst/Model.pm" + }, + "Catalyst::Request" : { + "file" : "Catalyst/Request.pm" + }, + "Catalyst::Request::Upload" : { + "file" : "Catalyst/Request/Upload.pm" + }, + "Catalyst::Response" : { + "file" : "Catalyst/Response.pm" + }, + "Catalyst::Runtime" : { + "file" : "Catalyst/Runtime.pm", + "version" : "5.80032" + }, + "Catalyst::Script::CGI" : { + "file" : "Catalyst/Script/CGI.pm" + }, + "Catalyst::Script::Create" : { + "file" : "Catalyst/Script/Create.pm" + }, + "Catalyst::Script::FastCGI" : { + "file" : "Catalyst/Script/FastCGI.pm" + }, + "Catalyst::Script::Server" : { + "file" : "Catalyst/Script/Server.pm" + }, + "Catalyst::Script::Test" : { + "file" : "Catalyst/Script/Test.pm" + }, + "Catalyst::ScriptRole" : { + "file" : "Catalyst/ScriptRole.pm" + }, + "Catalyst::ScriptRunner" : { + "file" : "Catalyst/ScriptRunner.pm" + }, + "Catalyst::Stats" : { + "file" : "Catalyst/Stats.pm" + }, + "Catalyst::Test" : { + "file" : "Catalyst/Test.pm" + }, + "Catalyst::Utils" : { + "file" : "Catalyst/Utils.pm" + }, + "Catalyst::View" : { + "file" : "Catalyst/View.pm" + } + }, + "version" : "5.80032" + }, + "Catalyst::View::TT" : { + "dist" : "Catalyst-View-TT-0.36", + "module" : "Catalyst::View::TT", + "mymeta" : { + "abstract" : "Template View Class", + "author" : [ + "Sebastian Riedel, C<sri@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Catalyst-View-TT", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst" : "5.7", + "Class::Accessor" : 0, + "MRO::Compat" : 0, + "Path::Class" : 0, + "Template" : 0, + "Template::Timer" : 0, + "Test::More" : 0, + "perl" : "5.008001" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-View-TT/" + } + }, + "version" : "0.36" + }, + "name" : "Catalyst::View::TT", + "pathname" : "/authors/id/A/AB/ABRAXXA/Catalyst-View-TT-0.36.tar.gz", + "provides" : { + "Catalyst::Helper::View::TT" : { + "file" : "Catalyst/Helper/View/TT.pm" + }, + "Catalyst::Helper::View::TTSite" : { + "file" : "Catalyst/Helper/View/TTSite.pm" + }, + "Catalyst::View::TT" : { + "file" : "Catalyst/View/TT.pm", + "version" : "0.36" + } + }, + "version" : "0.36" + }, + "CatalystX::Component::Traits" : { + "dist" : "CatalystX-Component-Traits-0.16", + "module" : "CatalystX::Component::Traits", + "mymeta" : { + "abstract" : "Automatic Trait Loading and Resolution for", + "author" : [ + "Rafael Kitover, C<< <rkitover@cpan.org> >>", + "Rafael Kitover <bobtfish@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.99, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "CatalystX-Component-Traits", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Module::Pluggable" : "3.9", + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst::Runtime" : "5.80005", + "List::MoreUtils" : 0, + "Module::Pluggable" : "3.9", + "MooseX::Traits::Pluggable" : "0.08", + "Scalar::Util" : 0, + "Test::More" : "0.88", + "namespace::autoclean" : 0 + } + } + }, + "provides" : { + "CatalystX::Component::Traits" : { + "file" : "lib/CatalystX/Component/Traits.pm", + "version" : "0.16" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://github.com/bobtfish/catalystx-component-traits.git" + } + }, + "version" : "0.16" + }, + "name" : "CatalystX::Component::Traits", + "pathname" : "/authors/id/B/BO/BOBTFISH/CatalystX-Component-Traits-0.16.tar.gz", + "provides" : { + "CatalystX::Component::Traits" : { + "file" : "CatalystX/Component/Traits.pm", + "version" : "0.16" + } + }, + "version" : "0.16" + }, + "Class::Accessor" : { + "dist" : "Class-Accessor-0.34", + "module" : "Class::Accessor", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "Marty Pauley <marty+perl@kasei.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.42, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-Accessor", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "base" : "1.01" + } + } + }, + "release_status" : "stable", + "version" : "0.34" + }, + "name" : "Class::Accessor", + "pathname" : "K/KA/KASEI/Class-Accessor-0.34.tar.gz", + "provides" : { + "Class::Accessor" : { + "file" : "Class/Accessor.pm", + "version" : "0.34" + }, + "Class::Accessor::Fast" : { + "file" : "Class/Accessor/Fast.pm", + "version" : "0.34" + }, + "Class::Accessor::Faster" : { + "file" : "Class/Accessor/Faster.pm", + "version" : "0.34" + } + }, + "version" : "0.34" + }, + "Class::Accessor::Chained" : { + "dist" : "Class-Accessor-Chained-0.01", + "module" : "Class::Accessor::Chained::Fast", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-Accessor-Chained", + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : 0 + } + }, + "runtime" : { + "requires" : { + "Class::Accessor" : 0 + } + } + }, + "provides" : { + "Class::Accessor::Chained" : { + "file" : "lib/Class/Accessor/Chained.pm", + "version" : "0.01" + }, + "Class::Accessor::Chained::Fast" : { + "file" : "lib/Class/Accessor/Chained/Fast.pm", + "version" : 0 + } + }, + "release_status" : "stable", + "version" : "0.01" + }, + "name" : "Class::Accessor::Chained", + "pathname" : "R/RC/RCLAMP/Class-Accessor-Chained-0.01.tar.gz", + "provides" : { + "Class::Accessor::Chained" : { + "file" : "Class/Accessor/Chained.pm", + "version" : "0.01" + }, + "Class::Accessor::Chained::Fast" : { + "file" : "Class/Accessor/Chained/Fast.pm" + } + }, + "version" : "0.01" + }, + "Class::Accessor::Grouped" : { + "dist" : "Class-Accessor-Grouped-0.10003", + "module" : "Class::Accessor::Grouped", + "mymeta" : { + "abstract" : "Lets you build groups of accessors", + "author" : [ + "Matt S. Trout <mst@shadowcatsystems.co.uk>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.01, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-Accessor-Grouped", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::Exception" : "0.31", + "Test::More" : "0.94" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Class::Inspector" : 0, + "Class::XSAccessor" : "1.11", + "Scalar::Util" : 0, + "Sub::Name" : "0.05", + "Test::Exception" : "0.31", + "Test::More" : "0.94", + "perl" : "5.006002" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://git.shadowcat.co.uk/p5sagit/Class-Accessor-Grouped.git" + } + }, + "version" : "0.10003" + }, + "name" : "Class::Accessor::Grouped", + "pathname" : "authors/id/F/FR/FREW/Class-Accessor-Grouped-0.10003.tar.gz", + "provides" : { + "Class::Accessor::Grouped" : { + "file" : "Class/Accessor/Grouped.pm", + "version" : "0.10003" + } + }, + "version" : "0.10003" + }, + "Class::C3" : { + "dist" : "Class-C3-0.23", + "module" : "Class::C3", + "mymeta" : { + "abstract" : "A pragma to use the C3 method resolution order algortihm", + "author" : [ + "Stevan Little, <stevan@iinteractive.com>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.99, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-C3", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.23" + }, + "name" : "Class::C3", + "pathname" : "F/FL/FLORA/Class-C3-0.23.tar.gz", + "provides" : { + "Class::C3" : { + "file" : "Class/C3.pm", + "version" : "0.23" + } + }, + "version" : "0.23" + }, + "Class::C3::Adopt::NEXT" : { + "dist" : "Class-C3-Adopt-NEXT-0.13", + "module" : "Class::C3::Adopt::NEXT", + "mymeta" : { + "abstract" : "make NEXT suck less", + "author" : [ + "Florian Ragwitz <rafl@debian.org>", + "Tomas Doran <bobtfish@bobtfish.net>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 2.101241, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-C3-Adopt-NEXT", + "prereqs" : { + "build" : { + "requires" : { + "FindBin" : 0, + "Test::Exception" : "0.27", + "Test::More" : 0, + "vars" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.31" + } + }, + "runtime" : { + "recommends" : {}, + "requires" : { + "List::MoreUtils" : 0, + "MRO::Compat" : 0, + "NEXT" : 0, + "warnings::register" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=Class-C3-Adopt-NEXT" + }, + "homepage" : "http://search.cpan.org/dist/Class-C3-Adopt-NEXT", + "repository" : { + "type" : "git", + "url" : "git://github.com/rafl/class-c3-adopt-next.git" + } + }, + "version" : "0.13", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@FLORA/@Filter/GatherDir", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@FLORA/@Filter/PruneCruft", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@FLORA/@Filter/ManifestSkip", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@FLORA/@Filter/MetaYAML", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@FLORA/@Filter/License", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@FLORA/@Filter/Readme", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@FLORA/@Filter/PkgVersion", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::PodCoverageTests", + "name" : "@FLORA/@Filter/PodCoverageTests", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@FLORA/@Filter/PodSyntaxTests", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@FLORA/@Filter/ExtraTests", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@FLORA/@Filter/ExecDir", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@FLORA/@Filter/ShareDir", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::MakeMaker", + "name" : "@FLORA/@Filter/MakeMaker", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@FLORA/@Filter/Manifest", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@FLORA/@Filter/ConfirmRelease", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@FLORA/@Filter/UploadToCPAN", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@FLORA/MetaConfig", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@FLORA/MetaJSON", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::MetaResources", + "name" : "@FLORA/MetaResources", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::Authority", + "name" : "@FLORA/Authority", + "version" : "0.01" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@FLORA/PodWeaver", + "version" : "3.100710" + }, + { + "class" : "Dist::Zilla::Plugin::AutoPrereq", + "name" : "AutoPrereq", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "2.101241" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "2.101241" + } + ], + "zilla" : { + "class" : "Dist::Zilla", + "config" : { + "is_trial" : 0 + }, + "version" : "2.101241" + } + }, + "x_authority" : "cpan:FLORA" + }, + "name" : "Class::C3::Adopt::NEXT", + "pathname" : "F/FL/FLORA/Class-C3-Adopt-NEXT-0.13.tar.gz", + "provides" : { + "Class::C3::Adopt::NEXT" : { + "file" : "Class/C3/Adopt/NEXT.pm", + "version" : "0.13" + } + }, + "version" : "0.13" + }, + "Class::C3::Componentised" : { + "dist" : "Class-C3-Componentised-1.001000", + "module" : "Class::C3::Componentised", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "Ash Berlin <ash@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.01, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-C3-Componentised", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Class::C3" : "0.20", + "Class::Inspector" : 0, + "MRO::Compat" : 0, + "Test::Exception" : 0, + "perl" : "5.006002" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://git.shadowcat.co.uk/p5sagit/Class-C3-Componentised.git" + } + }, + "version" : "1.001000" + }, + "name" : "Class::C3::Componentised", + "pathname" : "F/FR/FREW/Class-C3-Componentised-1.001000.tar.gz", + "provides" : { + "Class::C3::Componentised" : { + "file" : "Class/C3/Componentised.pm", + "version" : "1.001000" + }, + "Class::C3::Componentised::ApplyHooks" : { + "file" : "Class/C3/Componentised/ApplyHooks.pm" + } + }, + "version" : "1.001000" + }, + "Class::Data::Inheritable" : { + "dist" : "Class-Data-Inheritable-0.08", + "module" : "Class::Data::Inheritable", + "mymeta" : { + "abstract" : "Inheritable, overridable class data", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.42, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-Data-Inheritable", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "0.08" + }, + "name" : "Class::Data::Inheritable", + "pathname" : "T/TM/TMTM/Class-Data-Inheritable-0.08.tar.gz", + "provides" : { + "Class::Data::Inheritable" : { + "file" : "Class/Data/Inheritable.pm", + "version" : "0.08" + } + }, + "version" : "0.08" + }, + "Class::Factory::Util" : { + "dist" : "Class-Factory-Util-1.7", + "module" : "Class::Factory::Util", + "mymeta" : { + "abstract" : "Provide utility methods for factory classes", + "author" : [ + "Dave Rolsky, <autarch@urth.org>.", + "Removed from Alzabo and packaged by Terrence Brannon,\n<tbone@cpan.org>." + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-Factory-Util", + "prereqs" : {}, + "provides" : { + "Class::Factory::Util" : { + "file" : "lib/Class/Factory/Util.pm", + "version" : "1.7" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "1.7" + }, + "name" : "Class::Factory::Util", + "pathname" : "D/DR/DROLSKY/Class-Factory-Util-1.7.tar.gz", + "provides" : { + "Class::Factory::Util" : { + "file" : "Class/Factory/Util.pm", + "version" : "1.7" + } + }, + "version" : "1.7" + }, + "Class::Inspector" : { + "dist" : "Class-Inspector-1.25", + "module" : "Class::Inspector", + "mymeta" : { + "abstract" : "Get information about a class and its structure", + "author" : [ + "Adam Kennedy <adamk@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-Inspector", + "no_index" : { + "directory" : [ + "inc", + "t", + "xt" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::More" : "0.47" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "File::Spec" : "0.80", + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://svn.ali.as/cpan/trunk/Class-Inspector" + }, + "x_ChangeLog" : "http://fisheye2.atlassian.com/changelog/cpan/trunk/Class-Inspector" + }, + "version" : "1.25", + "x_module_name" : "Class::Inspector" + }, + "name" : "Class::Inspector", + "pathname" : "/authors/id/A/AD/ADAMK/Class-Inspector-1.25.tar.gz", + "provides" : { + "Class::Inspector" : { + "file" : "Class/Inspector.pm", + "version" : "1.25" + }, + "Class::Inspector::Functions" : { + "file" : "Class/Inspector/Functions.pm", + "version" : "1.25" + } + }, + "version" : "1.25" + }, + "Class::Load" : { + "dist" : "Class-Load-0.12", + "module" : "Class::Load", + "mymeta" : { + "abstract" : "a working (require \"Class::Name\") and more", + "author" : [ + "Shawn M Moore <sartak at bestpractical.com>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.300002, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-Load", + "prereqs" : { + "build" : { + "requires" : { + "Test::Fatal" : 0, + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.30" + } + }, + "runtime" : { + "requires" : { + "Data::OptList" : 0, + "Module::Runtime" : "0.011", + "Package::Stash" : "0.32", + "Scalar::Util" : 0, + "Try::Tiny" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Class-Load" + }, + "repository" : { + "type" : "git", + "url" : "git://github.com/autarch/class-load.git" + } + }, + "version" : "0.12" + }, + "name" : "Class::Load", + "pathname" : "D/DR/DROLSKY/Class-Load-0.12.tar.gz", + "provides" : { + "Class::Load" : { + "file" : "Class/Load.pm", + "version" : "0.12" + }, + "Class::Load::PP" : { + "file" : "Class/Load/PP.pm", + "version" : "0.12" + } + }, + "version" : "0.12" + }, + "Class::Load::XS" : { + "dist" : "Class-Load-XS-0.03", + "module" : "Class::Load::XS", + "mymeta" : { + "abstract" : "XS implementation of parts of Class::Load", + "author" : [ + "Dave Rolsky <autarch@urth.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "artistic_2" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-Load-XS", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::CBuilder" : 0, + "Module::Build" : "0.3601", + "Test::Fatal" : 0, + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "Module::Build" : "0.3601" + } + }, + "runtime" : { + "requires" : { + "Class::Load" : "0.11" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Class-Load-XS" + }, + "repository" : { + "type" : "git", + "url" : "git://git.urth.org/Class-Load-XS.git" + } + }, + "version" : "0.03" + }, + "name" : "Class::Load::XS", + "pathname" : "D/DR/DROLSKY/Class-Load-XS-0.03.tar.gz", + "provides" : { + "Class::Load::XS" : { + "file" : "Class/Load/XS.pm", + "version" : "0.03" + } + }, + "version" : "0.03" + }, + "Class::Mix" : { + "dist" : "Class-Mix-0.005", + "module" : "Class::Mix", + "mymeta" : { + "abstract" : "dynamic class mixing", + "author" : [ + "Andrew Main (Zefram) <zefram@fysh.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-Mix", + "prereqs" : { + "build" : { + "requires" : { + "Module::Build" : 0, + "Test::More" : 0, + "perl" : "5.006", + "strict" : 0, + "warnings" : 0 + } + }, + "configure" : { + "requires" : { + "Module::Build" : 0, + "perl" : "5.006", + "strict" : 0, + "warnings" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Exporter" : 0, + "Params::Classify" : 0, + "constant" : 0, + "if" : 0, + "parent" : 0, + "perl" : "5.006", + "strict" : 0, + "warnings" : 0 + } + } + }, + "provides" : { + "Class::Mix" : { + "file" : "lib/Class/Mix.pm", + "version" : "0.005" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.005" + }, + "name" : "Class::Mix", + "pathname" : "Z/ZE/ZEFRAM/Class-Mix-0.005.tar.gz", + "provides" : { + "Class::Mix" : { + "file" : "Class/Mix.pm", + "version" : "0.005" + } + }, + "version" : "0.005" + }, + "Class::Singleton" : { + "dist" : "Class-Singleton-1.4", + "module" : "Class::Singleton", + "mymeta" : { + "abstract" : "Base class for creating singleton objects", + "author" : [ + "Andy Wardley <abw@wardley.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.31, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-Singleton", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "1.4" + }, + "name" : "Class::Singleton", + "pathname" : "A/AB/ABW/Class-Singleton-1.4.tar.gz", + "provides" : { + "Class::Singleton" : { + "file" : "Class/Singleton.pm", + "version" : "1.4" + } + }, + "version" : "1.4" + }, + "Class::Unload" : { + "dist" : "Class-Unload-0.07", + "module" : "Class::Unload", + "mymeta" : { + "abstract" : "Unload a class", + "author" : [ + "Dagfinn Ilmari MannsÃ¥ker <ilmari@ilmari.org>;" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.200001, CPAN::Meta::Converter version 2.102400, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-Unload", + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.31" + } + }, + "runtime" : { + "requires" : { + "Class::Inspector" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.07" + }, + "name" : "Class::Unload", + "pathname" : "I/IL/ILMARI/Class-Unload-0.07.tar.gz", + "provides" : { + "Class::Unload" : { + "file" : "Class/Unload.pm", + "version" : "0.07" + } + }, + "version" : "0.07" + }, + "Class::XSAccessor" : { + "dist" : "Class-XSAccessor-1.13", + "module" : "Class::XSAccessor", + "mymeta" : { + "abstract" : "Generate fast XS accessors without runtime compilation", + "author" : [ + "Steffen Mueller <smueller@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Class-XSAccessor", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "XSLoader" : 0, + "perl" : "5.008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "type" : "git", + "url" : "git://github.com/tsee/Class-XSAccessor.git" + } + }, + "version" : "1.13" + }, + "name" : "Class::XSAccessor", + "pathname" : "S/SM/SMUELLER/Class-XSAccessor-1.13.tar.gz", + "provides" : { + "Class::XSAccessor" : { + "file" : "Class/XSAccessor.pm", + "version" : "1.13" + }, + "Class::XSAccessor::Array" : { + "file" : "Class/XSAccessor/Array.pm", + "version" : "1.13" + } + }, + "version" : "1.13" + }, + "Clone" : { + "dist" : "Clone-0.31", + "module" : "Clone", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.30, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Clone", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "0.31", + "x_installdirs" : "site", + "x_version_from" : "Clone.pm" + }, + "name" : "Clone", + "pathname" : "R/RD/RDF/Clone-0.31.tar.gz", + "provides" : { + "Clone" : { + "file" : "Clone.pm", + "version" : "0.31" + } + }, + "version" : "0.31" + }, + "Compress::Bzip2" : { + "dist" : "Compress-Bzip2-2.09", + "module" : "Compress::Bzip2", + "mymeta" : { + "abstract" : "Interface to Bzip2 compression library", + "author" : [ + "Rob Janes <arjay@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Compress-Bzip2", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Config" : 0, + "Fcntl" : 0, + "File::Copy" : 0, + "File::Spec" : 0, + "Getopt::Std" : 0, + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "version" : "2.09" + }, + "name" : "Compress::Bzip2", + "pathname" : "/authors/id/A/AR/ARJAY/Compress-Bzip2-2.09.tar.gz", + "provides" : { + "Compress::Bzip2" : { + "file" : "Compress/Bzip2.pm", + "version" : "2.09" + } + }, + "version" : "2.09" + }, + "Config::Any" : { + "dist" : "Config-Any-0.20", + "module" : "Config::Any", + "mymeta" : { + "abstract" : "Load configuration from different file formats, transparently", + "author" : [ + "Joel Bernstein <rataxis@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Config-Any", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Module::Pluggable" : "3.01", + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/trunk/Config-Any/" + } + }, + "version" : "0.20" + }, + "name" : "Config::Any", + "pathname" : "/authors/id/B/BR/BRICAS/Config-Any-0.20.tar.gz", + "provides" : { + "Config::Any" : { + "file" : "Config/Any.pm", + "version" : "0.20" + }, + "Config::Any::Base" : { + "file" : "Config/Any/Base.pm" + }, + "Config::Any::General" : { + "file" : "Config/Any/General.pm" + }, + "Config::Any::INI" : { + "file" : "Config/Any/INI.pm" + }, + "Config::Any::JSON" : { + "file" : "Config/Any/JSON.pm" + }, + "Config::Any::Perl" : { + "file" : "Config/Any/Perl.pm" + }, + "Config::Any::XML" : { + "file" : "Config/Any/XML.pm" + }, + "Config::Any::YAML" : { + "file" : "Config/Any/YAML.pm" + } + }, + "version" : "0.20" + }, + "ConfigReader::Simple" : { + "dist" : "ConfigReader-Simple-1.28", + "module" : "ConfigReader::Simple", + "mymeta" : { + "abstract" : "Simple configuration file parser", + "author" : [ + "brian d foy <bdfoy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.50, CPAN::Meta::Converter version 2.112150", + "keywords" : [ + "testing", + "STDOUT", + "STDERR" + ], + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "ConfigReader-Simple", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::Output" : 0, + "Test::Warn" : 0, + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "type" : "git", + "url" : "git://github.com/briandfoy/test-output.git" + } + }, + "version" : "1.28" + }, + "name" : "ConfigReader::Simple", + "pathname" : "/authors/id/B/BD/BDFOY/ConfigReader-Simple-1.28.tar.gz", + "provides" : { + "ConfigReader::Simple" : { + "file" : "ConfigReader/Simple.pm", + "version" : "1.28" + } + }, + "version" : "1.28" + }, + "Context::Preserve" : { + "dist" : "Context-Preserve-0.01", + "module" : "Context::Preserve", + "mymeta" : { + "abstract" : "run code after a subroutine call, preserving the context the subroutine would have seen if it were the last statement in the caller", + "author" : [ + "AND COPYRIGHT" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.68, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Context-Preserve", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Exporter" : 0, + "Test::Exception" : 0, + "Test::More" : 0, + "ok" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.01" + }, + "name" : "Context::Preserve", + "pathname" : "J/JR/JROCKWAY/Context-Preserve-0.01.tar.gz", + "provides" : { + "Context::Preserve" : { + "file" : "Context/Preserve.pm", + "version" : "0.01" + } + }, + "version" : "0.01" + }, + "Crypt::Eksblowfish" : { + "dist" : "Crypt-Eksblowfish-0.009", + "module" : "Crypt::Eksblowfish", + "mymeta" : { + "abstract" : "the Eksblowfish block cipher", + "author" : [ + "Solar Designer (solar at openwall.com)", + "Andrew Main (Zefram) <zefram@fysh.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Crypt-Eksblowfish", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::CBuilder" : "0.15", + "Module::Build" : 0, + "Test::More" : 0, + "perl" : "5.006", + "strict" : 0, + "warnings" : 0 + } + }, + "configure" : { + "requires" : { + "Module::Build" : 0, + "perl" : "5.006", + "strict" : 0, + "warnings" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Class::Mix" : "0.001", + "Exporter" : 0, + "MIME::Base64" : "2.21", + "XSLoader" : 0, + "parent" : 0, + "perl" : "5.006", + "strict" : 0, + "warnings" : 0 + } + } + }, + "provides" : { + "Crypt::Eksblowfish" : { + "file" : "lib/Crypt/Eksblowfish.pm", + "version" : "0.009" + }, + "Crypt::Eksblowfish::Bcrypt" : { + "file" : "lib/Crypt/Eksblowfish/Bcrypt.pm", + "version" : "0.009" + }, + "Crypt::Eksblowfish::Blowfish" : { + "file" : "lib/Crypt/Eksblowfish/Blowfish.pm", + "version" : "0.009" + }, + "Crypt::Eksblowfish::Family" : { + "file" : "lib/Crypt/Eksblowfish/Family.pm", + "version" : "0.009" + }, + "Crypt::Eksblowfish::Subkeyed" : { + "file" : "lib/Crypt/Eksblowfish/Subkeyed.pm", + "version" : "0.009" + }, + "Crypt::Eksblowfish::Uklblowfish" : { + "file" : "lib/Crypt/Eksblowfish/Uklblowfish.pm", + "version" : "0.009" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.009" + }, + "name" : "Crypt::Eksblowfish", + "pathname" : "Z/ZE/ZEFRAM/Crypt-Eksblowfish-0.009.tar.gz", + "provides" : { + "Crypt::Eksblowfish" : { + "file" : "Crypt/Eksblowfish.pm", + "version" : "0.009" + }, + "Crypt::Eksblowfish::Bcrypt" : { + "file" : "Crypt/Eksblowfish/Bcrypt.pm", + "version" : "0.009" + }, + "Crypt::Eksblowfish::Blowfish" : { + "file" : "Crypt/Eksblowfish/Blowfish.pm", + "version" : "0.009" + }, + "Crypt::Eksblowfish::Family" : { + "file" : "Crypt/Eksblowfish/Family.pm", + "version" : "0.009" + }, + "Crypt::Eksblowfish::Subkeyed" : { + "file" : "Crypt/Eksblowfish/Subkeyed.pm", + "version" : "0.009" + }, + "Crypt::Eksblowfish::Uklblowfish" : { + "file" : "Crypt/Eksblowfish/Uklblowfish.pm", + "version" : "0.009" + } + }, + "version" : "0.009" + }, + "DBD::Pg" : { + "dist" : "DBD-Pg-2.18.1", + "module" : "DBD::Pg", + "mymeta" : { + "abstract" : "DBI PostgreSQL interface", + "author" : [ + "Greg Sabino Mullane <greg@turnstep.com>" + ], + "dynamic_config" : 0, + "generated_by" : "emacs, CPAN::Meta::Converter version 2.112150", + "keywords" : [ + "Postgres", + "PostgreSQL", + "DBI", + "libpq", + "dbdpg" + ], + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DBD-Pg", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "DBI" : "1.52", + "version" : 0 + } + }, + "runtime" : { + "recommends" : { + "Cwd" : 0, + "Encode" : 0, + "File::Comments" : 0, + "File::Comments::Plugin::C" : 0, + "File::Temp" : 0, + "Module::Signature" : "0.50", + "Perl::Critic" : 0, + "Pod::Spell" : 0, + "Test::Pod" : "0.95", + "Test::Pod::Coverage" : 0, + "Test::Warn" : "0.08", + "Test::YAML::Meta" : "0.03", + "Text::SpellChecker" : 0, + "Time::HiRes" : 0 + }, + "requires" : { + "DBI" : "1.52", + "ExtUtils::MakeMaker" : "6.11", + "Test::More" : "0.61", + "version" : 0 + } + } + }, + "provides" : { + "Bundle::DBD::Pg" : { + "file" : "lib/Bundle/DBD/Pg.pm", + "version" : "v2.18.1" + }, + "DBD::Pg" : { + "file" : "Pg.pm", + "version" : "v2.18.1" + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=DBD-Pg" + }, + "homepage" : "http://search.cpan.org/dist/DBD-Pg/", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://svn.perl.org/modules/DBD-Pg/trunk/" + }, + "x_MailingList" : "http://www.nntp.perl.org/group/perl.dbd.pg/" + }, + "version" : "2.18.1" + }, + "name" : "DBD::Pg", + "pathname" : "T/TU/TURNSTEP/DBD-Pg-2.18.1.tar.gz", + "provides" : { + "Bundle::DBD::Pg" : { + "file" : "Bundle/DBD/Pg.pm", + "version" : "v2.18.1" + }, + "DBD::Pg" : { + "file" : "DBD/Pg.pm", + "version" : "v2.18.1" + }, + "DBD::Pg::DefaultValue" : { + "file" : "DBD/Pg.pm" + }, + "DBD::Pg::db" : { + "file" : "DBD/Pg.pm" + }, + "DBD::Pg::dr" : { + "file" : "DBD/Pg.pm" + }, + "DBD::Pg::st" : { + "file" : "DBD/Pg.pm" + } + }, + "version" : "v2.18.1" + }, + "DBD::SQLite" : { + "dist" : "DBD-SQLite-1.31", + "module" : "DBD::SQLite", + "mymeta" : { + "abstract" : "Self Contained SQLite RDBMS in a DBI Driver", + "author" : [ + "Adam Kennedy <adamk@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DBD-SQLite", + "no_index" : { + "directory" : [ + "t", + "inc", + "util" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "DBI" : "1.57", + "ExtUtils::MakeMaker" : "6.48", + "File::Spec" : "0.82" + } + }, + "runtime" : { + "requires" : { + "DBI" : "1.57", + "File::Spec" : "0.82", + "Test::Builder" : "0.86", + "Test::More" : "0.47", + "Tie::Hash" : 0, + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=DBD-SQLite" + }, + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://svn.ali.as/cpan/trunk/DBD-SQLite" + }, + "x_MailingList" : "http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbd-sqlite" + }, + "version" : "1.31" + }, + "name" : "DBD::SQLite", + "pathname" : "/authors/id/A/AD/ADAMK/DBD-SQLite-1.31.tar.gz", + "provides" : { + "DBD::SQLite" : { + "file" : "DBD/SQLite.pm", + "version" : "1.31" + }, + "DBD::SQLite::db" : { + "file" : "DBD/SQLite.pm" + }, + "DBD::SQLite::dr" : { + "file" : "DBD/SQLite.pm" + } + }, + "version" : "1.31" + }, + "DBI" : { + "dist" : "DBI-1.616", + "module" : "DBI", + "mymeta" : { + "abstract" : "Database independent interface for Perl", + "author" : [ + "Tim Bunce (dbi-users@perl.org)" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DBI", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.48", + "Test::Simple" : "0.90" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "conflicts" : { + "DBD::AnyData" : "0.09", + "DBD::CSV" : "0.29", + "DBD::PO" : "2.10", + "DBD::RAM" : "0.072", + "SQL::Statement" : "1.27" + }, + "recommends" : { + "Clone" : "0.31", + "DB_File" : 0, + "MLDBM" : 0, + "Net::Daemon" : 0, + "RPC::PlServer" : "0.2001", + "SQL::Statement" : "1.28" + }, + "requires" : { + "perl" : "5.008" + } + } + }, + "release_status" : "stable", + "resources" : { + "homepage" : "http://dbi.perl.org/", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "https://svn.perl.org/modules/dbi/trunk/" + }, + "x_MailingList" : "mailto:dbi-dev@perl.org" + }, + "version" : "1.616" + }, + "name" : "DBI", + "pathname" : "T/TI/TIMB/DBI-1.616.tar.gz", + "provides" : { + "Bundle::DBI" : { + "file" : "Bundle/DBI.pm", + "version" : "12.008695" + }, + "DBD::DBM" : { + "file" : "DBD/DBM.pm", + "version" : "0.06" + }, + "DBD::DBM::Statement" : { + "file" : "DBD/DBM.pm" + }, + "DBD::DBM::Table" : { + "file" : "DBD/DBM.pm" + }, + "DBD::DBM::db" : { + "file" : "DBD/DBM.pm" + }, + "DBD::DBM::dr" : { + "file" : "DBD/DBM.pm" + }, + "DBD::DBM::st" : { + "file" : "DBD/DBM.pm" + }, + "DBD::ExampleP" : { + "file" : "DBD/ExampleP.pm", + "version" : "12.014310" + }, + "DBD::ExampleP::db" : { + "file" : "DBD/ExampleP.pm" + }, + "DBD::ExampleP::dr" : { + "file" : "DBD/ExampleP.pm" + }, + "DBD::ExampleP::st" : { + "file" : "DBD/ExampleP.pm" + }, + "DBD::File" : { + "file" : "DBD/File.pm", + "version" : "0.40" + }, + "DBD::File::Statement" : { + "file" : "DBD/File.pm" + }, + "DBD::File::Table" : { + "file" : "DBD/File.pm" + }, + "DBD::File::TieMeta" : { + "file" : "DBD/File.pm" + }, + "DBD::File::TieTables" : { + "file" : "DBD/File.pm" + }, + "DBD::File::db" : { + "file" : "DBD/File.pm" + }, + "DBD::File::dr" : { + "file" : "DBD/File.pm" + }, + "DBD::File::st" : { + "file" : "DBD/File.pm" + }, + "DBD::Gofer" : { + "file" : "DBD/Gofer.pm", + "version" : "0.014282" + }, + "DBD::Gofer::Policy::Base" : { + "file" : "DBD/Gofer/Policy/Base.pm", + "version" : "0.010087" + }, + "DBD::Gofer::Policy::classic" : { + "file" : "DBD/Gofer/Policy/classic.pm", + "version" : "0.010087" + }, + "DBD::Gofer::Policy::pedantic" : { + "file" : "DBD/Gofer/Policy/pedantic.pm", + "version" : "0.010087" + }, + "DBD::Gofer::Policy::rush" : { + "file" : "DBD/Gofer/Policy/rush.pm", + "version" : "0.010087" + }, + "DBD::Gofer::Transport::Base" : { + "file" : "DBD/Gofer/Transport/Base.pm", + "version" : "0.014120" + }, + "DBD::Gofer::Transport::corostream" : { + "file" : "DBD/Gofer/Transport/corostream.pm" + }, + "DBD::Gofer::Transport::null" : { + "file" : "DBD/Gofer/Transport/null.pm", + "version" : "0.010087" + }, + "DBD::Gofer::Transport::pipeone" : { + "file" : "DBD/Gofer/Transport/pipeone.pm", + "version" : "0.010087" + }, + "DBD::Gofer::Transport::stream" : { + "file" : "DBD/Gofer/Transport/stream.pm", + "version" : "0.014598" + }, + "DBD::Gofer::db" : { + "file" : "DBD/Gofer.pm" + }, + "DBD::Gofer::dr" : { + "file" : "DBD/Gofer.pm" + }, + "DBD::Gofer::st" : { + "file" : "DBD/Gofer.pm" + }, + "DBD::NullP" : { + "file" : "DBD/NullP.pm", + "version" : "12.014563" + }, + "DBD::NullP::db" : { + "file" : "DBD/NullP.pm" + }, + "DBD::NullP::dr" : { + "file" : "DBD/NullP.pm" + }, + "DBD::NullP::st" : { + "file" : "DBD/NullP.pm" + }, + "DBD::Proxy" : { + "file" : "DBD/Proxy.pm", + "version" : "0.2004" + }, + "DBD::Proxy::RPC::PlClient" : { + "file" : "DBD/Proxy.pm" + }, + "DBD::Proxy::db" : { + "file" : "DBD/Proxy.pm" + }, + "DBD::Proxy::dr" : { + "file" : "DBD/Proxy.pm" + }, + "DBD::Proxy::st" : { + "file" : "DBD/Proxy.pm" + }, + "DBD::Sponge" : { + "file" : "DBD/Sponge.pm", + "version" : "12.010002" + }, + "DBD::Sponge::db" : { + "file" : "DBD/Sponge.pm" + }, + "DBD::Sponge::dr" : { + "file" : "DBD/Sponge.pm" + }, + "DBD::Sponge::st" : { + "file" : "DBD/Sponge.pm" + }, + "DBDI" : { + "file" : "DBI/DBD.pm" + }, + "DBI" : { + "file" : "DBI.pm", + "version" : "1.616" + }, + "DBI::Const::GetInfo::ANSI" : { + "file" : "DBI/Const/GetInfo/ANSI.pm", + "version" : "2.008696" + }, + "DBI::Const::GetInfo::ODBC" : { + "file" : "DBI/Const/GetInfo/ODBC.pm", + "version" : "2.011373" + }, + "DBI::Const::GetInfoReturn" : { + "file" : "DBI/Const/GetInfoReturn.pm", + "version" : "2.008696" + }, + "DBI::Const::GetInfoType" : { + "file" : "DBI/Const/GetInfoType.pm", + "version" : "2.008696" + }, + "DBI::DBD" : { + "file" : "DBI/DBD.pm", + "version" : "12.014600" + }, + "DBI::DBD::Metadata" : { + "file" : "DBI/DBD/Metadata.pm", + "version" : "2.014213" + }, + "DBI::DBD::SqlEngine" : { + "file" : "DBI/DBD/SqlEngine.pm", + "version" : "0.03" + }, + "DBI::DBD::SqlEngine::Statement" : { + "file" : "DBI/DBD/SqlEngine.pm" + }, + "DBI::DBD::SqlEngine::Table" : { + "file" : "DBI/DBD/SqlEngine.pm" + }, + "DBI::DBD::SqlEngine::db" : { + "file" : "DBI/DBD/SqlEngine.pm" + }, + "DBI::DBD::SqlEngine::dr" : { + "file" : "DBI/DBD/SqlEngine.pm" + }, + "DBI::DBD::SqlEngine::st" : { + "file" : "DBI/DBD/SqlEngine.pm" + }, + "DBI::FAQ" : { + "file" : "DBI/FAQ.pm", + "version" : "1.014270" + }, + "DBI::Gofer::Execute" : { + "file" : "DBI/Gofer/Execute.pm", + "version" : "0.014282" + }, + "DBI::Gofer::Request" : { + "file" : "DBI/Gofer/Request.pm", + "version" : "0.012536" + }, + "DBI::Gofer::Response" : { + "file" : "DBI/Gofer/Response.pm", + "version" : "0.011565" + }, + "DBI::Gofer::Serializer::Base" : { + "file" : "DBI/Gofer/Serializer/Base.pm", + "version" : "0.009949" + }, + "DBI::Gofer::Serializer::DataDumper" : { + "file" : "DBI/Gofer/Serializer/DataDumper.pm", + "version" : "0.009949" + }, + "DBI::Gofer::Serializer::Storable" : { + "file" : "DBI/Gofer/Serializer/Storable.pm", + "version" : "0.009949" + }, + "DBI::Gofer::Transport::Base" : { + "file" : "DBI/Gofer/Transport/Base.pm", + "version" : "0.012536" + }, + "DBI::Gofer::Transport::pipeone" : { + "file" : "DBI/Gofer/Transport/pipeone.pm", + "version" : "0.012536" + }, + "DBI::Gofer::Transport::stream" : { + "file" : "DBI/Gofer/Transport/stream.pm", + "version" : "0.012536" + }, + "DBI::Profile" : { + "file" : "DBI/Profile.pm", + "version" : "2.014123" + }, + "DBI::ProfileData" : { + "file" : "DBI/ProfileData.pm", + "version" : "2.010007" + }, + "DBI::ProfileDumper" : { + "file" : "DBI/ProfileDumper.pm", + "version" : "2.013956" + }, + "DBI::ProfileDumper::Apache" : { + "file" : "DBI/ProfileDumper/Apache.pm", + "version" : "2.014120" + }, + "DBI::ProfileSubs" : { + "file" : "DBI/ProfileSubs.pm", + "version" : "0.009395" + }, + "DBI::ProxyServer" : { + "file" : "DBI/ProxyServer.pm", + "version" : "0.3005" + }, + "DBI::ProxyServer::db" : { + "file" : "DBI/ProxyServer.pm" + }, + "DBI::ProxyServer::dr" : { + "file" : "DBI/ProxyServer.pm" + }, + "DBI::ProxyServer::st" : { + "file" : "DBI/ProxyServer.pm" + }, + "DBI::PurePerl" : { + "file" : "DBI/PurePerl.pm", + "version" : "2.014285" + }, + "DBI::SQL::Nano" : { + "file" : "DBI/SQL/Nano.pm", + "version" : "1.014600" + }, + "DBI::SQL::Nano::Statement_" : { + "file" : "DBI/SQL/Nano.pm" + }, + "DBI::SQL::Nano::Table_" : { + "file" : "DBI/SQL/Nano.pm" + }, + "DBI::Util::CacheMemory" : { + "file" : "DBI/Util/CacheMemory.pm", + "version" : "0.010314" + }, + "DBI::common" : { + "file" : "DBI.pm" + } + }, + "version" : "1.616" + }, + "DBIx::Class" : { + "dist" : "DBIx-Class-0.08196", + "module" : "DBIx::Class", + "mymeta" : { + "abstract" : "Extensible and flexible object <-> relational mapper.", + "author" : [ + "mst: Matt S. Trout <mst@shadowcatsystems.co.uk>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.01, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DBIx-Class", + "no_index" : { + "directory" : [ + "examples", + "inc", + "lib/DBIx/Class/Admin", + "lib/DBIx/Class/CDBICompat", + "lib/DBIx/Class/PK/Auto", + "t", + "xt" + ], + "package" : [ + "DBIx::Class::Storage::DBIHacks", + "DBIx::Class::Carp", + "DBIx::Class::ResultSet::Pager" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "DBD::SQLite" : "1.29", + "ExtUtils::MakeMaker" : "6.42", + "File::Temp" : "0.22", + "Package::Stash" : "0.28", + "Test::Builder" : "0.94", + "Test::Exception" : "0.31", + "Test::More" : "0.94", + "Test::Warn" : "0.21" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Class::Accessor::Grouped" : "0.10002", + "Class::C3::Componentised" : "1.0009", + "Class::Inspector" : "1.24", + "Config::Any" : "0.20", + "Context::Preserve" : "0.01", + "DBD::SQLite" : "1.29", + "DBI" : "1.57", + "Data::Compare" : "1.22", + "Data::Dumper::Concise" : "2.020", + "Data::Page" : "2.00", + "File::Path" : "2.07", + "File::Temp" : "0.22", + "Hash::Merge" : "0.12", + "MRO::Compat" : "0.09", + "Module::Find" : "0.06", + "Package::Stash" : "0.28", + "Path::Class" : "0.18", + "SQL::Abstract" : "1.72", + "Scope::Guard" : "0.03", + "Sub::Name" : "0.04", + "Test::Builder" : "0.94", + "Test::Exception" : "0.31", + "Test::More" : "0.94", + "Test::Warn" : "0.21", + "Try::Tiny" : "0.04", + "namespace::clean" : "0.20", + "perl" : "5.008001" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=DBIx-Class" + }, + "homepage" : "http://www.dbix-class.org/", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://git.shadowcat.co.uk/dbsrgits/DBIx-Class.git" + }, + "x_IRC" : "irc://irc.perl.org/#dbix-class", + "x_MailingList" : "http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class" + }, + "version" : "0.08196" + }, + "name" : "DBIx::Class", + "pathname" : "A/AR/ARODLAND/DBIx-Class-0.08196.tar.gz", + "provides" : { + "DBIx::Class" : { + "file" : "DBIx/Class.pm", + "version" : "0.08196" + }, + "DBIx::Class::AccessorGroup" : { + "file" : "DBIx/Class/AccessorGroup.pm" + }, + "DBIx::Class::Admin" : { + "file" : "DBIx/Class/Admin.pm" + }, + "DBIx::Class::CDBICompat" : { + "file" : "DBIx/Class/CDBICompat.pm" + }, + "DBIx::Class::CDBICompat::Iterator" : { + "file" : "DBIx/Class/CDBICompat/Iterator.pm" + }, + "DBIx::Class::CDBICompat::Iterator::ResultSet" : { + "file" : "DBIx/Class/CDBICompat/Iterator.pm" + }, + "DBIx::Class::CDBICompat::SQLTransformer" : { + "file" : "DBIx/Class/CDBICompat/SQLTransformer.pm" + }, + "DBIx::Class::CDBICompat::Tied::ColumnValue" : { + "file" : "DBIx/Class/CDBICompat/ColumnsAsHash.pm" + }, + "DBIx::Class::Carp" : { + "file" : "DBIx/Class/Carp.pm" + }, + "DBIx::Class::Core" : { + "file" : "DBIx/Class/Core.pm" + }, + "DBIx::Class::Cursor" : { + "file" : "DBIx/Class/Cursor.pm" + }, + "DBIx::Class::DB" : { + "file" : "DBIx/Class/DB.pm" + }, + "DBIx::Class::Exception" : { + "file" : "DBIx/Class/Exception.pm" + }, + "DBIx::Class::FilterColumn" : { + "file" : "DBIx/Class/FilterColumn.pm" + }, + "DBIx::Class::InflateColumn" : { + "file" : "DBIx/Class/InflateColumn.pm" + }, + "DBIx::Class::InflateColumn::DateTime" : { + "file" : "DBIx/Class/InflateColumn/DateTime.pm" + }, + "DBIx::Class::InflateColumn::File" : { + "file" : "DBIx/Class/InflateColumn/File.pm" + }, + "DBIx::Class::Optional::Dependencies" : { + "file" : "DBIx/Class/Optional/Dependencies.pm" + }, + "DBIx::Class::Ordered" : { + "file" : "DBIx/Class/Ordered.pm" + }, + "DBIx::Class::PK" : { + "file" : "DBIx/Class/PK.pm" + }, + "DBIx::Class::PK::Auto" : { + "file" : "DBIx/Class/PK/Auto.pm" + }, + "DBIx::Class::Relationship" : { + "file" : "DBIx/Class/Relationship.pm" + }, + "DBIx::Class::Relationship::Base" : { + "file" : "DBIx/Class/Relationship/Base.pm" + }, + "DBIx::Class::ResultClass::HashRefInflator" : { + "file" : "DBIx/Class/ResultClass/HashRefInflator.pm" + }, + "DBIx::Class::ResultSet" : { + "file" : "DBIx/Class/ResultSet.pm" + }, + "DBIx::Class::ResultSetColumn" : { + "file" : "DBIx/Class/ResultSetColumn.pm" + }, + "DBIx::Class::ResultSetManager" : { + "file" : "DBIx/Class/ResultSetManager.pm" + }, + "DBIx::Class::ResultSource" : { + "file" : "DBIx/Class/ResultSource.pm" + }, + "DBIx::Class::ResultSource::Table" : { + "file" : "DBIx/Class/ResultSource/Table.pm" + }, + "DBIx::Class::ResultSource::View" : { + "file" : "DBIx/Class/ResultSource/View.pm" + }, + "DBIx::Class::ResultSourceHandle" : { + "file" : "DBIx/Class/ResultSourceHandle.pm" + }, + "DBIx::Class::ResultSourceProxy::Table" : { + "file" : "DBIx/Class/ResultSourceProxy/Table.pm" + }, + "DBIx::Class::Row" : { + "file" : "DBIx/Class/Row.pm" + }, + "DBIx::Class::SQLMaker" : { + "file" : "DBIx/Class/SQLMaker.pm" + }, + "DBIx::Class::SQLMaker::LimitDialects" : { + "file" : "DBIx/Class/SQLMaker/LimitDialects.pm" + }, + "DBIx::Class::SQLMaker::OracleJoins" : { + "file" : "DBIx/Class/SQLMaker/OracleJoins.pm" + }, + "DBIx::Class::Schema" : { + "file" : "DBIx/Class/Schema.pm" + }, + "DBIx::Class::Schema::Versioned" : { + "file" : "DBIx/Class/Schema/Versioned.pm" + }, + "DBIx::Class::Serialize::Storable" : { + "file" : "DBIx/Class/Serialize/Storable.pm" + }, + "DBIx::Class::StartupCheck" : { + "file" : "DBIx/Class/StartupCheck.pm" + }, + "DBIx::Class::Storage" : { + "file" : "DBIx/Class/Storage.pm" + }, + "DBIx::Class::Storage::DBI" : { + "file" : "DBIx/Class/Storage/DBI.pm" + }, + "DBIx::Class::Storage::DBI::ACCESS" : { + "file" : "DBIx/Class/Storage/DBI/ACCESS.pm" + }, + "DBIx::Class::Storage::DBI::ADO" : { + "file" : "DBIx/Class/Storage/DBI/ADO.pm" + }, + "DBIx::Class::Storage::DBI::ADO::MS_Jet" : { + "file" : "DBIx/Class/Storage/DBI/ADO/MS_Jet.pm" + }, + "DBIx::Class::Storage::DBI::ADO::MS_Jet::Cursor" : { + "file" : "DBIx/Class/Storage/DBI/ADO/MS_Jet/Cursor.pm" + }, + "DBIx::Class::Storage::DBI::ADO::Microsoft_SQL_Server" : { + "file" : "DBIx/Class/Storage/DBI/ADO/Microsoft_SQL_Server.pm" + }, + "DBIx::Class::Storage::DBI::AutoCast" : { + "file" : "DBIx/Class/Storage/DBI/AutoCast.pm" + }, + "DBIx::Class::Storage::DBI::Cursor" : { + "file" : "DBIx/Class/Storage/DBI/Cursor.pm" + }, + "DBIx::Class::Storage::DBI::DB2" : { + "file" : "DBIx/Class/Storage/DBI/DB2.pm" + }, + "DBIx::Class::Storage::DBI::Firebird" : { + "file" : "DBIx/Class/Storage/DBI/Firebird.pm" + }, + "DBIx::Class::Storage::DBI::Firebird::Common" : { + "file" : "DBIx/Class/Storage/DBI/Firebird/Common.pm" + }, + "DBIx::Class::Storage::DBI::Informix" : { + "file" : "DBIx/Class/Storage/DBI/Informix.pm" + }, + "DBIx::Class::Storage::DBI::InterBase" : { + "file" : "DBIx/Class/Storage/DBI/InterBase.pm" + }, + "DBIx::Class::Storage::DBI::MSSQL" : { + "file" : "DBIx/Class/Storage/DBI/MSSQL.pm" + }, + "DBIx::Class::Storage::DBI::MultiColumnIn" : { + "file" : "DBIx/Class/Storage/DBI/MultiColumnIn.pm" + }, + "DBIx::Class::Storage::DBI::NoBindVars" : { + "file" : "DBIx/Class/Storage/DBI/NoBindVars.pm" + }, + "DBIx::Class::Storage::DBI::ODBC" : { + "file" : "DBIx/Class/Storage/DBI/ODBC.pm" + }, + "DBIx::Class::Storage::DBI::ODBC::ACCESS" : { + "file" : "DBIx/Class/Storage/DBI/ODBC/ACCESS.pm" + }, + "DBIx::Class::Storage::DBI::ODBC::DB2_400_SQL" : { + "file" : "DBIx/Class/Storage/DBI/ODBC/DB2_400_SQL.pm" + }, + "DBIx::Class::Storage::DBI::ODBC::Firebird" : { + "file" : "DBIx/Class/Storage/DBI/ODBC/Firebird.pm" + }, + "DBIx::Class::Storage::DBI::ODBC::Microsoft_SQL_Server" : { + "file" : "DBIx/Class/Storage/DBI/ODBC/Microsoft_SQL_Server.pm" + }, + "DBIx::Class::Storage::DBI::ODBC::SQL_Anywhere" : { + "file" : "DBIx/Class/Storage/DBI/ODBC/SQL_Anywhere.pm" + }, + "DBIx::Class::Storage::DBI::Oracle" : { + "file" : "DBIx/Class/Storage/DBI/Oracle.pm" + }, + "DBIx::Class::Storage::DBI::Oracle::Generic" : { + "file" : "DBIx/Class/Storage/DBI/Oracle/Generic.pm" + }, + "DBIx::Class::Storage::DBI::Oracle::WhereJoins" : { + "file" : "DBIx/Class/Storage/DBI/Oracle/WhereJoins.pm" + }, + "DBIx::Class::Storage::DBI::Pg" : { + "file" : "DBIx/Class/Storage/DBI/Pg.pm" + }, + "DBIx::Class::Storage::DBI::Replicated" : { + "file" : "DBIx/Class/Storage/DBI/Replicated.pm" + }, + "DBIx::Class::Storage::DBI::Replicated::Balancer" : { + "file" : "DBIx/Class/Storage/DBI/Replicated/Balancer.pm" + }, + "DBIx::Class::Storage::DBI::Replicated::Balancer::First" : { + "file" : "DBIx/Class/Storage/DBI/Replicated/Balancer/First.pm" + }, + "DBIx::Class::Storage::DBI::Replicated::Balancer::Random" : { + "file" : "DBIx/Class/Storage/DBI/Replicated/Balancer/Random.pm" + }, + "DBIx::Class::Storage::DBI::Replicated::Pool" : { + "file" : "DBIx/Class/Storage/DBI/Replicated/Pool.pm" + }, + "DBIx::Class::Storage::DBI::Replicated::Replicant" : { + "file" : "DBIx/Class/Storage/DBI/Replicated/Replicant.pm" + }, + "DBIx::Class::Storage::DBI::Replicated::WithDSN" : { + "file" : "DBIx/Class/Storage/DBI/Replicated/WithDSN.pm" + }, + "DBIx::Class::Storage::DBI::SQLAnywhere" : { + "file" : "DBIx/Class/Storage/DBI/SQLAnywhere.pm" + }, + "DBIx::Class::Storage::DBI::SQLAnywhere::Cursor" : { + "file" : "DBIx/Class/Storage/DBI/SQLAnywhere/Cursor.pm" + }, + "DBIx::Class::Storage::DBI::SQLite" : { + "file" : "DBIx/Class/Storage/DBI/SQLite.pm" + }, + "DBIx::Class::Storage::DBI::Sybase" : { + "file" : "DBIx/Class/Storage/DBI/Sybase.pm" + }, + "DBIx::Class::Storage::DBI::Sybase::ASE" : { + "file" : "DBIx/Class/Storage/DBI/Sybase/ASE.pm" + }, + "DBIx::Class::Storage::DBI::Sybase::ASE::NoBindVars" : { + "file" : "DBIx/Class/Storage/DBI/Sybase/ASE/NoBindVars.pm" + }, + "DBIx::Class::Storage::DBI::Sybase::FreeTDS" : { + "file" : "DBIx/Class/Storage/DBI/Sybase/FreeTDS.pm" + }, + "DBIx::Class::Storage::DBI::Sybase::MSSQL" : { + "file" : "DBIx/Class/Storage/DBI/Sybase/MSSQL.pm" + }, + "DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server" : { + "file" : "DBIx/Class/Storage/DBI/Sybase/Microsoft_SQL_Server.pm" + }, + "DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server::NoBindVars" : { + "file" : "DBIx/Class/Storage/DBI/Sybase/Microsoft_SQL_Server/NoBindVars.pm" + }, + "DBIx::Class::Storage::DBI::UniqueIdentifier" : { + "file" : "DBIx/Class/Storage/DBI/UniqueIdentifier.pm" + }, + "DBIx::Class::Storage::DBI::mysql" : { + "file" : "DBIx/Class/Storage/DBI/mysql.pm" + }, + "DBIx::Class::Storage::Statistics" : { + "file" : "DBIx/Class/Storage/Statistics.pm" + }, + "DBIx::Class::Storage::TxnScopeGuard" : { + "file" : "DBIx/Class/Storage/TxnScopeGuard.pm" + }, + "DBIx::Class::UTF8Columns" : { + "file" : "DBIx/Class/UTF8Columns.pm" + }, + "SQL::Translator::Parser::DBIx::Class" : { + "file" : "SQL/Translator/Parser/DBIx/Class.pm", + "version" : "1.10" + }, + "SQL::Translator::Producer::DBIx::Class::File" : { + "file" : "SQL/Translator/Producer/DBIx/Class/File.pm", + "version" : "0.1" + } + }, + "version" : "0.08196" + }, + "DBIx::Class::EncodedColumn" : { + "dist" : "DBIx-Class-EncodedColumn-0.00011", + "module" : "DBIx::Class::EncodedColumn", + "mymeta" : { + "abstract" : "Automatically encode column values", + "author" : [ + "Guillermo Roditi (groditi) <groditi@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DBIx-Class-EncodedColumn", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "DBD::SQLite" : 0, + "Dir::Self" : 0, + "ExtUtils::MakeMaker" : "6.42", + "File::Spec" : 0, + "File::Temp" : 0, + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "DBD::SQLite" : 0, + "DBIx::Class" : "0.06002", + "Dir::Self" : 0, + "File::Spec" : 0, + "File::Temp" : 0, + "Sub::Name" : "0.04", + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://github.com/wreis/DBIx-Class-EncodedColumn.git" + } + }, + "version" : "0.00011" + }, + "name" : "DBIx::Class::EncodedColumn", + "pathname" : "W/WR/WREIS/DBIx-Class-EncodedColumn-0.00011.tar.gz", + "provides" : { + "DBIx::Class::EncodedColumn" : { + "file" : "DBIx/Class/EncodedColumn.pm", + "version" : "0.00011" + }, + "DBIx::Class::EncodedColumn::Crypt" : { + "file" : "DBIx/Class/EncodedColumn/Crypt.pm", + "version" : "0.01" + }, + "DBIx::Class::EncodedColumn::Crypt::Eksblowfish::Bcrypt" : { + "file" : "DBIx/Class/EncodedColumn/Crypt/Eksblowfish/Bcrypt.pm", + "version" : "0.00001" + }, + "DBIx::Class::EncodedColumn::Crypt::OpenPGP" : { + "file" : "DBIx/Class/EncodedColumn/Crypt/OpenPGP.pm", + "version" : "0.01" + }, + "DBIx::Class::EncodedColumn::Digest" : { + "file" : "DBIx/Class/EncodedColumn/Digest.pm", + "version" : "0.00001" + } + }, + "version" : "0.00011" + }, + "Data::Compare" : { + "dist" : "Data-Compare-1.22", + "module" : "Data::Compare", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.50, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Data-Compare", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "File::Find::Rule" : "0.1", + "Scalar::Util" : 0 + } + } + }, + "release_status" : "stable", + "version" : "1.22" + }, + "name" : "Data::Compare", + "pathname" : "D/DC/DCANTRELL/Data-Compare-1.22.tar.gz", + "provides" : { + "Data::Compare" : { + "file" : "Data/Compare.pm", + "version" : "1.22" + }, + "Data::Compare::Plugins::Scalar::Properties" : { + "file" : "Data/Compare/Plugins/Scalar/Properties.pm", + "version" : "1" + } + }, + "version" : "1.22" + }, + "Data::Dump" : { + "dist" : "Data-Dump-1.21", + "module" : "Data::Dump", + "mymeta" : { + "abstract" : "Pretty printing of data structures", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.57_05, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Data-Dump", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Test" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "recommends" : { + "MIME::Base64" : 0 + }, + "requires" : { + "Symbol" : 0, + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/data-dump" + } + }, + "version" : "1.21" + }, + "name" : "Data::Dump", + "pathname" : "G/GA/GAAS/Data-Dump-1.21.tar.gz", + "provides" : { + "Data::Dump" : { + "file" : "Data/Dump.pm", + "version" : "1.21" + }, + "Data::Dump::FilterContext" : { + "file" : "Data/Dump/FilterContext.pm" + }, + "Data::Dump::Filtered" : { + "file" : "Data/Dump/Filtered.pm" + }, + "Data::Dump::Trace" : { + "file" : "Data/Dump/Trace.pm", + "version" : "0.02" + }, + "Data::Dump::Trace::Call" : { + "file" : "Data/Dump/Trace.pm" + }, + "Data::Dump::Trace::Wrapper" : { + "file" : "Data/Dump/Trace.pm" + } + }, + "version" : "1.21" + }, + "Data::Dumper::Concise" : { + "dist" : "Data-Dumper-Concise-2.020", + "module" : "Data::Dumper::Concise", + "mymeta" : { + "abstract" : "Less indentation and newlines plus sub deparsing", + "author" : [ + "mst - Matt S. Trout <mst@shadowcat.co.uk>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Data-Dumper-Concise", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "2.020", + "x_module_name" : "Data::Dumper::Concise" + }, + "name" : "Data::Dumper::Concise", + "pathname" : "F/FR/FREW/Data-Dumper-Concise-2.020.tar.gz", + "provides" : { + "Data::Dumper::Concise" : { + "file" : "Data/Dumper/Concise.pm", + "version" : "2.020" + }, + "Data::Dumper::Concise::Sugar" : { + "file" : "Data/Dumper/Concise/Sugar.pm" + }, + "Devel::Dwarn" : { + "file" : "Devel/Dwarn.pm" + } + }, + "version" : "2.020" + }, + "Data::OptList" : { + "dist" : "Data-OptList-0.107", + "module" : "Data::OptList", + "mymeta" : { + "abstract" : "parse and validate simple name/value option pairs", + "author" : [ + "Ricardo Signes <rjbs@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.200006, CPAN::Meta::Converter version 2.110930, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Data-OptList", + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : "0.96" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.30" + } + }, + "runtime" : { + "requires" : { + "List::Util" : 0, + "Params::Util" : 0, + "Sub::Install" : "0.921" + } + } + }, + "release_status" : "stable", + "resources" : { + "homepage" : "http://github.com/rjbs/data-optlist", + "repository" : { + "url" : "http://github.com/rjbs/data-optlist" + } + }, + "version" : "0.107", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::CheckPrereqsIndexed", + "name" : "@RJBS/CheckPrereqsIndexed", + "version" : "0.002" + }, + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@RJBS/@Basic/GatherDir", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@RJBS/@Basic/PruneCruft", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@RJBS/@Basic/ManifestSkip", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@RJBS/@Basic/MetaYAML", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@RJBS/@Basic/License", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@RJBS/@Basic/Readme", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@RJBS/@Basic/ExtraTests", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@RJBS/@Basic/ExecDir", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@RJBS/@Basic/ShareDir", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::MakeMaker", + "name" : "@RJBS/@Basic/MakeMaker", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@RJBS/@Basic/Manifest", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::TestRelease", + "name" : "@RJBS/@Basic/TestRelease", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@RJBS/@Basic/ConfirmRelease", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@RJBS/@Basic/UploadToCPAN", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::AutoPrereqs", + "name" : "@RJBS/AutoPrereqs", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::Git::NextVersion", + "name" : "@RJBS/Git::NextVersion", + "version" : "1.110500" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@RJBS/PkgVersion", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@RJBS/MetaConfig", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@RJBS/MetaJSON", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::NextRelease", + "name" : "@RJBS/NextRelease", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@RJBS/PodSyntaxTests", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::Repository", + "name" : "@RJBS/Repository", + "version" : "0.18" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "@RJBS/TestMoreWithSubtests", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@RJBS/PodWeaver", + "version" : "3.101641" + }, + { + "class" : "Dist::Zilla::Plugin::GithubMeta", + "name" : "@RJBS/GithubMeta", + "version" : "0.12" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Check", + "name" : "@RJBS/@Git/Check", + "version" : "1.110500" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Commit", + "name" : "@RJBS/@Git/Commit", + "version" : "1.110500" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Tag", + "name" : "@RJBS/@Git/Tag", + "version" : "1.110500" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Push", + "name" : "@RJBS/@Git/Push", + "version" : "1.110500" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":IncModules", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":MainModule", + "version" : "4.200006" + } + ], + "zilla" : { + "class" : "Dist::Zilla::Dist::Builder", + "config" : { + "is_trial" : 0 + }, + "version" : "4.200006" + } + } + }, + "name" : "Data::OptList", + "pathname" : "R/RJ/RJBS/Data-OptList-0.107.tar.gz", + "provides" : { + "Data::OptList" : { + "file" : "Data/OptList.pm", + "version" : "0.107" + } + }, + "version" : "0.107" + }, + "Data::Page" : { + "dist" : "Data-Page-2.02", + "module" : "Data::Page", + "mymeta" : { + "abstract" : "help when paging through sets of results", + "author" : [ + "Based on code originally by Leo Lapworth, with many changes added by\nby Leon Brocard <acme@astray.com>." + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Data-Page", + "prereqs" : { + "configure" : { + "requires" : { + "Module::Build" : "0.35" + } + }, + "runtime" : { + "requires" : { + "Class::Accessor::Chained::Fast" : 0, + "Test::Exception" : 0, + "Test::More" : 0 + } + } + }, + "provides" : { + "Data::Page" : { + "file" : "lib/Data/Page.pm", + "version" : "2.02" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "2.02" + }, + "name" : "Data::Page", + "pathname" : "L/LB/LBROCARD/Data-Page-2.02.tar.gz", + "provides" : { + "Data::Page" : { + "file" : "Data/Page.pm", + "version" : "2.02" + } + }, + "version" : "2.02" + }, + "Data::UUID" : { + "dist" : "Data-UUID-1.217", + "module" : "Data::UUID", + "mymeta" : { + "abstract" : "Perl extension for generating Globally/Universally", + "author" : [ + "Ricardo Signes <rjbs[at]cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "bsd" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Data-UUID", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Digest::MD5" : 0 + } + } + }, + "release_status" : "stable", + "version" : "1.217" + }, + "name" : "Data::UUID", + "pathname" : "R/RJ/RJBS/Data-UUID-1.217.tar.gz", + "provides" : { + "Data::UUID" : { + "file" : "Data/UUID.pm", + "version" : "1.217" + } + }, + "version" : "1.217" + }, + "Data::Visitor" : { + "dist" : "Data-Visitor-0.27", + "module" : "Data::Visitor", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Data-Visitor", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Moose" : "0.89", + "Task::Weaken" : 0, + "Test::More" : 0, + "Test::use::ok" : 0, + "Tie::ToObject" : "0.01", + "namespace::clean" : "0.08" + } + } + }, + "release_status" : "stable", + "version" : "0.27" + }, + "name" : "Data::Visitor", + "pathname" : "F/FL/FLORA/Data-Visitor-0.27.tar.gz", + "provides" : { + "Data::Visitor" : { + "file" : "Data/Visitor.pm", + "version" : "0.27" + }, + "Data::Visitor::Callback" : { + "file" : "Data/Visitor/Callback.pm" + } + }, + "version" : "0.27" + }, + "DateTime" : { + "dist" : "DateTime-0.70", + "module" : "DateTime", + "mymeta" : { + "abstract" : "A date and time object", + "author" : [ + "Dave Rolsky <autarch@urth.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "artistic_2" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DateTime", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::CBuilder" : 0, + "Module::Build" : "0.3601", + "Test::Exception" : 0, + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "Module::Build" : "0.3601" + } + }, + "runtime" : { + "requires" : { + "DateTime::Locale" : "0.41", + "DateTime::TimeZone" : "1.09", + "Math::Round" : 0, + "Params::Validate" : "0.76", + "Scalar::Util" : 0, + "Time::Local" : "1.04", + "perl" : "v5.8.1" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=DateTime" + }, + "repository" : { + "url" : "http://hg.urth.org/hg/DateTime.pm" + } + }, + "version" : "0.70" + }, + "name" : "DateTime", + "pathname" : "D/DR/DROLSKY/DateTime-0.70.tar.gz", + "provides" : { + "DateTime" : { + "file" : "DateTime.pm", + "version" : "0.70" + }, + "DateTime::Duration" : { + "file" : "DateTime/Duration.pm", + "version" : "0.70" + }, + "DateTime::Helpers" : { + "file" : "DateTime/Helpers.pm", + "version" : "0.70" + }, + "DateTime::Infinite" : { + "file" : "DateTime/Infinite.pm", + "version" : "0.70" + }, + "DateTime::Infinite::Future" : { + "file" : "DateTime/Infinite.pm", + "version" : "0.70" + }, + "DateTime::Infinite::Past" : { + "file" : "DateTime/Infinite.pm", + "version" : "0.70" + }, + "DateTime::LeapSecond" : { + "file" : "DateTime/LeapSecond.pm", + "version" : "0.70" + } + }, + "version" : "0.70" + }, + "DateTime::Format::Builder" : { + "dist" : "DateTime-Format-Builder-0.80", + "module" : "DateTime::Format::Builder", + "mymeta" : { + "abstract" : "Create DateTime parser classes and objects.", + "author" : [ + "Originally written by Iain Truskett <spoon@cpan.org>, who died on\nDecember 29, 2003.", + "Maintained by Dave Rolsky <autarch@urth.org>." + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DateTime-Format-Builder", + "prereqs" : { + "build" : { + "requires" : { + "Module::Build" : 0 + } + }, + "configure" : { + "requires" : { + "Module::Build" : "0.36" + } + }, + "runtime" : { + "requires" : { + "Class::Factory::Util" : "1.6", + "DateTime" : "0.12", + "DateTime::Format::Strptime" : "1.04", + "Params::Validate" : "0.72", + "Task::Weaken" : 0 + } + } + }, + "provides" : { + "DateTime::Format::Builder" : { + "file" : "lib/DateTime/Format/Builder.pm", + "version" : "0.80" + }, + "DateTime::Format::Builder::Parser" : { + "file" : "lib/DateTime/Format/Builder/Parser.pm", + "version" : "0.77" + }, + "DateTime::Format::Builder::Parser::Dispatch" : { + "file" : "lib/DateTime/Format/Builder/Parser/Dispatch.pm", + "version" : "0.78" + }, + "DateTime::Format::Builder::Parser::Quick" : { + "file" : "lib/DateTime/Format/Builder/Parser/Quick.pm", + "version" : "0.77" + }, + "DateTime::Format::Builder::Parser::Regex" : { + "file" : "lib/DateTime/Format/Builder/Parser/Regex.pm", + "version" : "0.77" + }, + "DateTime::Format::Builder::Parser::Strptime" : { + "file" : "lib/DateTime/Format/Builder/Parser/Strptime.pm", + "version" : "0.77" + }, + "DateTime::Format::Builder::Parser::generic" : { + "file" : "lib/DateTime/Format/Builder/Parser/generic.pm", + "version" : "0.77" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.80" + }, + "name" : "DateTime::Format::Builder", + "pathname" : "D/DR/DROLSKY/DateTime-Format-Builder-0.80.tar.gz", + "provides" : { + "DateTime::Format::Builder" : { + "file" : "DateTime/Format/Builder.pm", + "version" : "0.80" + }, + "DateTime::Format::Builder::Parser" : { + "file" : "DateTime/Format/Builder/Parser.pm", + "version" : "0.77" + }, + "DateTime::Format::Builder::Parser::Dispatch" : { + "file" : "DateTime/Format/Builder/Parser/Dispatch.pm", + "version" : "0.78" + }, + "DateTime::Format::Builder::Parser::Quick" : { + "file" : "DateTime/Format/Builder/Parser/Quick.pm", + "version" : "0.77" + }, + "DateTime::Format::Builder::Parser::Regex" : { + "file" : "DateTime/Format/Builder/Parser/Regex.pm", + "version" : "0.77" + }, + "DateTime::Format::Builder::Parser::Strptime" : { + "file" : "DateTime/Format/Builder/Parser/Strptime.pm", + "version" : "0.77" + }, + "DateTime::Format::Builder::Parser::generic" : { + "file" : "DateTime/Format/Builder/Parser/generic.pm", + "version" : "0.77" + } + }, + "version" : "0.80" + }, + "DateTime::Format::HTTP" : { + "dist" : "DateTime-Format-HTTP-0.40", + "module" : "DateTime::Format::HTTP", + "mymeta" : { + "abstract" : "Date conversion routines", + "author" : [ + "Christiaan Kras <ckras@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DateTime-Format-HTTP", + "prereqs" : { + "configure" : { + "requires" : { + "Module::Build" : "0.36" + } + }, + "runtime" : { + "requires" : { + "DateTime" : "0.17", + "HTTP::Date" : "1.44", + "Test::More" : "0.47" + } + } + }, + "provides" : { + "DateTime::Format::HTTP" : { + "file" : "lib/DateTime/Format/HTTP.pm", + "version" : "0.40" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.40" + }, + "name" : "DateTime::Format::HTTP", + "pathname" : "/authors/id/C/CK/CKRAS/DateTime-Format-HTTP-0.40.tar.gz", + "provides" : { + "DateTime::Format::HTTP" : { + "file" : "DateTime/Format/HTTP.pm", + "version" : "0.40" + } + }, + "version" : "0.40" + }, + "DateTime::Format::ISO8601" : { + "dist" : "DateTime-Format-ISO8601-0.07", + "module" : "DateTime::Format::ISO8601", + "mymeta" : { + "abstract" : "Parses ISO8601 formats", + "author" : [ + "Joshua Hoblitt <jhoblitt@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DateTime-Format-ISO8601", + "prereqs" : { + "configure" : { + "requires" : { + "Module::Build" : "0.35" + } + }, + "runtime" : { + "recommends" : { + "File::Find::Rule" : "0.24", + "Test::Distribution" : "1.22", + "Test::Pod" : "0.95" + }, + "requires" : { + "DateTime" : "0.18", + "DateTime::Format::Builder" : "0.77" + } + } + }, + "provides" : { + "DateTime::Format::ISO8601" : { + "file" : "lib/DateTime/Format/ISO8601.pm", + "version" : "0.07" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.07" + }, + "name" : "DateTime::Format::ISO8601", + "pathname" : "J/JH/JHOBLITT/DateTime-Format-ISO8601-0.07.tar.gz", + "provides" : { + "DateTime::Format::ISO8601" : { + "file" : "DateTime/Format/ISO8601.pm", + "version" : "0.07" + } + }, + "version" : "0.07" + }, + "DateTime::Format::Mail" : { + "dist" : "DateTime-Format-Mail-0.3001", + "module" : "DateTime::Format::Mail", + "mymeta" : { + "abstract" : "Convert between DateTime and RFC2822/822 formats", + "author" : [ + "Originally written by Iain Truskett <spoon@cpan.org>, who died on\nDecember 29, 2003.", + "Maintained by Dave Rolsky <autarch@urth.org>." + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DateTime-Format-Mail", + "prereqs" : { + "build" : { + "requires" : { + "Module::Build" : 0 + } + }, + "runtime" : { + "requires" : { + "DateTime" : "0.1705", + "Params::Validate" : "0.67", + "Test::More" : "0.47" + } + } + }, + "provides" : { + "DateTime::Format::Mail" : { + "file" : "lib/DateTime/Format/Mail.pm", + "version" : "0.3001" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.3001" + }, + "name" : "DateTime::Format::Mail", + "pathname" : "D/DR/DROLSKY/DateTime-Format-Mail-0.3001.tar.gz", + "provides" : { + "DateTime::Format::Mail" : { + "file" : "DateTime/Format/Mail.pm", + "version" : "0.3001" + } + }, + "version" : "0.3001" + }, + "DateTime::Format::Pg" : { + "dist" : "DateTime-Format-Pg-0.16007", + "module" : "DateTime::Format::Pg", + "mymeta" : { + "abstract" : "Parse and format PostgreSQL dates and times", + "author" : [ + "Daisuke Maki <daisuke@endeworks.jp>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.01, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DateTime-Format-Pg", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "DateTime" : "0.10", + "DateTime::Format::Builder" : "0.72", + "DateTime::TimeZone" : "0.05" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://github.com/lestrrat/DateTime-Format-Pg.git" + } + }, + "version" : "0.16007" + }, + "name" : "DateTime::Format::Pg", + "pathname" : "D/DM/DMAKI/DateTime-Format-Pg-0.16007.tar.gz", + "provides" : { + "DateTime::Format::Pg" : { + "file" : "DateTime/Format/Pg.pm", + "version" : "0.16007" + } + }, + "version" : "0.16007" + }, + "DateTime::Format::Strptime" : { + "dist" : "DateTime-Format-Strptime-1.5000", + "module" : "DateTime::Format::Strptime", + "mymeta" : { + "abstract" : "Parse and format strp and strf time patterns", + "author" : [ + "Dave Rolsky <autarch@urth.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.102342, CPAN::Meta::Converter version 2.101670, CPAN::Meta::Converter version 2.112150", + "license" : [ + "artistic_2" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DateTime-Format-Strptime", + "prereqs" : { + "build" : { + "requires" : {} + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.31" + } + }, + "runtime" : { + "requires" : { + "DateTime" : "0.4304", + "DateTime::Locale" : "0.45", + "DateTime::TimeZone" : "0.79", + "Params::Validate" : "0.64", + "Test::More" : "0.88" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=DateTime-Format-Strptime" + }, + "repository" : { + "url" : "http://hg.urth.org/hg/DateTime-Format-Strptime" + } + }, + "version" : "1.5000" + }, + "name" : "DateTime::Format::Strptime", + "pathname" : "D/DR/DROLSKY/DateTime-Format-Strptime-1.5000.tar.gz", + "provides" : { + "DateTime::Format::Strptime" : { + "file" : "DateTime/Format/Strptime.pm", + "version" : "1.5000" + } + }, + "version" : "1.5000" + }, + "DateTime::Format::W3CDTF" : { + "dist" : "DateTime-Format-W3CDTF-0.06", + "module" : "DateTime::Format::W3CDTF", + "mymeta" : { + "abstract" : "Parse and format W3CDTF datetime strings", + "author" : [ + "Dave Rolsky <autarch@urth.org>", + "Gregory Todd Williams <gwilliams@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.99, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DateTime-Format-W3CDTF", + "no_index" : { + "directory" : [ + "examples", + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::More" : "0.61" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "DateTime" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=DateTime-Format-W3CDTF" + }, + "homepage" : "http://search.cpan.org/dist/DateTime-Format-W3CDTF/", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://github.com/kasei/datetime-format-w3cdtf" + } + }, + "version" : "0.06" + }, + "name" : "DateTime::Format::W3CDTF", + "pathname" : "G/GW/GWILLIAMS/DateTime-Format-W3CDTF-0.06.tar.gz", + "provides" : { + "DateTime::Format::W3CDTF" : { + "file" : "DateTime/Format/W3CDTF.pm", + "version" : "0.06" + } + }, + "version" : "0.06" + }, + "DateTime::Locale" : { + "dist" : "DateTime-Locale-0.45", + "module" : "DateTime::Locale", + "mymeta" : { + "abstract" : "Localization support for DateTime.pm", + "author" : [ + "Dave Rolsky <autarch@urth.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DateTime-Locale", + "prereqs" : { + "build" : { + "requires" : { + "Module::Build" : 0 + } + }, + "configure" : { + "requires" : { + "Module::Build" : "0.36" + } + }, + "runtime" : { + "requires" : { + "List::MoreUtils" : 0, + "Params::Validate" : "0.91", + "perl" : "5.006" + } + } + }, + "provides" : { + "DateTime::Locale" : { + "file" : "lib/DateTime/Locale.pm", + "version" : "0.45" + }, + "DateTime::Locale::Base" : { + "file" : "lib/DateTime/Locale/Base.pm", + "version" : 0 + }, + "DateTime::Locale::Catalog" : { + "file" : "lib/DateTime/Locale/Catalog.pm", + "version" : 0 + }, + "DateTime::Locale::aa" : { + "file" : "lib/DateTime/Locale/aa.pm", + "version" : 0 + }, + "DateTime::Locale::aa_DJ" : { + "file" : "lib/DateTime/Locale/aa_DJ.pm", + "version" : 0 + }, + "DateTime::Locale::aa_ER" : { + "file" : "lib/DateTime/Locale/aa_ER.pm", + "version" : 0 + }, + "DateTime::Locale::aa_ER_SAAHO" : { + "file" : "lib/DateTime/Locale/aa_ER_SAAHO.pm", + "version" : 0 + }, + "DateTime::Locale::aa_ET" : { + "file" : "lib/DateTime/Locale/aa_ET.pm", + "version" : 0 + }, + "DateTime::Locale::af" : { + "file" : "lib/DateTime/Locale/af.pm", + "version" : 0 + }, + "DateTime::Locale::af_NA" : { + "file" : "lib/DateTime/Locale/af_NA.pm", + "version" : 0 + }, + "DateTime::Locale::af_ZA" : { + "file" : "lib/DateTime/Locale/af_ZA.pm", + "version" : 0 + }, + "DateTime::Locale::ak" : { + "file" : "lib/DateTime/Locale/ak.pm", + "version" : 0 + }, + "DateTime::Locale::ak_GH" : { + "file" : "lib/DateTime/Locale/ak_GH.pm", + "version" : 0 + }, + "DateTime::Locale::am" : { + "file" : "lib/DateTime/Locale/am.pm", + "version" : 0 + }, + "DateTime::Locale::am_ET" : { + "file" : "lib/DateTime/Locale/am_ET.pm", + "version" : 0 + }, + "DateTime::Locale::ar" : { + "file" : "lib/DateTime/Locale/ar.pm", + "version" : 0 + }, + "DateTime::Locale::ar_AE" : { + "file" : "lib/DateTime/Locale/ar_AE.pm", + "version" : 0 + }, + "DateTime::Locale::ar_BH" : { + "file" : "lib/DateTime/Locale/ar_BH.pm", + "version" : 0 + }, + "DateTime::Locale::ar_DZ" : { + "file" : "lib/DateTime/Locale/ar_DZ.pm", + "version" : 0 + }, + "DateTime::Locale::ar_EG" : { + "file" : "lib/DateTime/Locale/ar_EG.pm", + "version" : 0 + }, + "DateTime::Locale::ar_IQ" : { + "file" : "lib/DateTime/Locale/ar_IQ.pm", + "version" : 0 + }, + "DateTime::Locale::ar_JO" : { + "file" : "lib/DateTime/Locale/ar_JO.pm", + "version" : 0 + }, + "DateTime::Locale::ar_KW" : { + "file" : "lib/DateTime/Locale/ar_KW.pm", + "version" : 0 + }, + "DateTime::Locale::ar_LB" : { + "file" : "lib/DateTime/Locale/ar_LB.pm", + "version" : 0 + }, + "DateTime::Locale::ar_LY" : { + "file" : "lib/DateTime/Locale/ar_LY.pm", + "version" : 0 + }, + "DateTime::Locale::ar_MA" : { + "file" : "lib/DateTime/Locale/ar_MA.pm", + "version" : 0 + }, + "DateTime::Locale::ar_OM" : { + "file" : "lib/DateTime/Locale/ar_OM.pm", + "version" : 0 + }, + "DateTime::Locale::ar_QA" : { + "file" : "lib/DateTime/Locale/ar_QA.pm", + "version" : 0 + }, + "DateTime::Locale::ar_SA" : { + "file" : "lib/DateTime/Locale/ar_SA.pm", + "version" : 0 + }, + "DateTime::Locale::ar_SD" : { + "file" : "lib/DateTime/Locale/ar_SD.pm", + "version" : 0 + }, + "DateTime::Locale::ar_SY" : { + "file" : "lib/DateTime/Locale/ar_SY.pm", + "version" : 0 + }, + "DateTime::Locale::ar_TN" : { + "file" : "lib/DateTime/Locale/ar_TN.pm", + "version" : 0 + }, + "DateTime::Locale::ar_YE" : { + "file" : "lib/DateTime/Locale/ar_YE.pm", + "version" : 0 + }, + "DateTime::Locale::as" : { + "file" : "lib/DateTime/Locale/as.pm", + "version" : 0 + }, + "DateTime::Locale::as_IN" : { + "file" : "lib/DateTime/Locale/as_IN.pm", + "version" : 0 + }, + "DateTime::Locale::az" : { + "file" : "lib/DateTime/Locale/az.pm", + "version" : 0 + }, + "DateTime::Locale::az_AZ" : { + "file" : "lib/DateTime/Locale/az_AZ.pm", + "version" : 0 + }, + "DateTime::Locale::az_Cyrl" : { + "file" : "lib/DateTime/Locale/az_Cyrl.pm", + "version" : 0 + }, + "DateTime::Locale::az_Cyrl_AZ" : { + "file" : "lib/DateTime/Locale/az_Cyrl_AZ.pm", + "version" : 0 + }, + "DateTime::Locale::az_Latn" : { + "file" : "lib/DateTime/Locale/az_Latn.pm", + "version" : 0 + }, + "DateTime::Locale::az_Latn_AZ" : { + "file" : "lib/DateTime/Locale/az_Latn_AZ.pm", + "version" : 0 + }, + "DateTime::Locale::be" : { + "file" : "lib/DateTime/Locale/be.pm", + "version" : 0 + }, + "DateTime::Locale::be_BY" : { + "file" : "lib/DateTime/Locale/be_BY.pm", + "version" : 0 + }, + "DateTime::Locale::bg" : { + "file" : "lib/DateTime/Locale/bg.pm", + "version" : 0 + }, + "DateTime::Locale::bg_BG" : { + "file" : "lib/DateTime/Locale/bg_BG.pm", + "version" : 0 + }, + "DateTime::Locale::bn" : { + "file" : "lib/DateTime/Locale/bn.pm", + "version" : 0 + }, + "DateTime::Locale::bn_BD" : { + "file" : "lib/DateTime/Locale/bn_BD.pm", + "version" : 0 + }, + "DateTime::Locale::bn_IN" : { + "file" : "lib/DateTime/Locale/bn_IN.pm", + "version" : 0 + }, + "DateTime::Locale::bo" : { + "file" : "lib/DateTime/Locale/bo.pm", + "version" : 0 + }, + "DateTime::Locale::bo_CN" : { + "file" : "lib/DateTime/Locale/bo_CN.pm", + "version" : 0 + }, + "DateTime::Locale::bo_IN" : { + "file" : "lib/DateTime/Locale/bo_IN.pm", + "version" : 0 + }, + "DateTime::Locale::bs" : { + "file" : "lib/DateTime/Locale/bs.pm", + "version" : 0 + }, + "DateTime::Locale::bs_BA" : { + "file" : "lib/DateTime/Locale/bs_BA.pm", + "version" : 0 + }, + "DateTime::Locale::byn" : { + "file" : "lib/DateTime/Locale/byn.pm", + "version" : 0 + }, + "DateTime::Locale::byn_ER" : { + "file" : "lib/DateTime/Locale/byn_ER.pm", + "version" : 0 + }, + "DateTime::Locale::ca" : { + "file" : "lib/DateTime/Locale/ca.pm", + "version" : 0 + }, + "DateTime::Locale::ca_ES" : { + "file" : "lib/DateTime/Locale/ca_ES.pm", + "version" : 0 + }, + "DateTime::Locale::cch" : { + "file" : "lib/DateTime/Locale/cch.pm", + "version" : 0 + }, + "DateTime::Locale::cch_NG" : { + "file" : "lib/DateTime/Locale/cch_NG.pm", + "version" : 0 + }, + "DateTime::Locale::cop" : { + "file" : "lib/DateTime/Locale/cop.pm", + "version" : 0 + }, + "DateTime::Locale::cs" : { + "file" : "lib/DateTime/Locale/cs.pm", + "version" : 0 + }, + "DateTime::Locale::cs_CZ" : { + "file" : "lib/DateTime/Locale/cs_CZ.pm", + "version" : 0 + }, + "DateTime::Locale::cy" : { + "file" : "lib/DateTime/Locale/cy.pm", + "version" : 0 + }, + "DateTime::Locale::cy_GB" : { + "file" : "lib/DateTime/Locale/cy_GB.pm", + "version" : 0 + }, + "DateTime::Locale::da" : { + "file" : "lib/DateTime/Locale/da.pm", + "version" : 0 + }, + "DateTime::Locale::da_DK" : { + "file" : "lib/DateTime/Locale/da_DK.pm", + "version" : 0 + }, + "DateTime::Locale::de" : { + "file" : "lib/DateTime/Locale/de.pm", + "version" : 0 + }, + "DateTime::Locale::de_AT" : { + "file" : "lib/DateTime/Locale/de_AT.pm", + "version" : 0 + }, + "DateTime::Locale::de_BE" : { + "file" : "lib/DateTime/Locale/de_BE.pm", + "version" : 0 + }, + "DateTime::Locale::de_CH" : { + "file" : "lib/DateTime/Locale/de_CH.pm", + "version" : 0 + }, + "DateTime::Locale::de_DE" : { + "file" : "lib/DateTime/Locale/de_DE.pm", + "version" : 0 + }, + "DateTime::Locale::de_LI" : { + "file" : "lib/DateTime/Locale/de_LI.pm", + "version" : 0 + }, + "DateTime::Locale::de_LU" : { + "file" : "lib/DateTime/Locale/de_LU.pm", + "version" : 0 + }, + "DateTime::Locale::dv" : { + "file" : "lib/DateTime/Locale/dv.pm", + "version" : 0 + }, + "DateTime::Locale::dv_MV" : { + "file" : "lib/DateTime/Locale/dv_MV.pm", + "version" : 0 + }, + "DateTime::Locale::dz" : { + "file" : "lib/DateTime/Locale/dz.pm", + "version" : 0 + }, + "DateTime::Locale::dz_BT" : { + "file" : "lib/DateTime/Locale/dz_BT.pm", + "version" : 0 + }, + "DateTime::Locale::ee" : { + "file" : "lib/DateTime/Locale/ee.pm", + "version" : 0 + }, + "DateTime::Locale::ee_GH" : { + "file" : "lib/DateTime/Locale/ee_GH.pm", + "version" : 0 + }, + "DateTime::Locale::ee_TG" : { + "file" : "lib/DateTime/Locale/ee_TG.pm", + "version" : 0 + }, + "DateTime::Locale::el" : { + "file" : "lib/DateTime/Locale/el.pm", + "version" : 0 + }, + "DateTime::Locale::el_CY" : { + "file" : "lib/DateTime/Locale/el_CY.pm", + "version" : 0 + }, + "DateTime::Locale::el_GR" : { + "file" : "lib/DateTime/Locale/el_GR.pm", + "version" : 0 + }, + "DateTime::Locale::el_POLYTON" : { + "file" : "lib/DateTime/Locale/el_POLYTON.pm", + "version" : 0 + }, + "DateTime::Locale::en" : { + "file" : "lib/DateTime/Locale/en.pm", + "version" : 0 + }, + "DateTime::Locale::en_AS" : { + "file" : "lib/DateTime/Locale/en_AS.pm", + "version" : 0 + }, + "DateTime::Locale::en_AU" : { + "file" : "lib/DateTime/Locale/en_AU.pm", + "version" : 0 + }, + "DateTime::Locale::en_BE" : { + "file" : "lib/DateTime/Locale/en_BE.pm", + "version" : 0 + }, + "DateTime::Locale::en_BW" : { + "file" : "lib/DateTime/Locale/en_BW.pm", + "version" : 0 + }, + "DateTime::Locale::en_BZ" : { + "file" : "lib/DateTime/Locale/en_BZ.pm", + "version" : 0 + }, + "DateTime::Locale::en_CA" : { + "file" : "lib/DateTime/Locale/en_CA.pm", + "version" : 0 + }, + "DateTime::Locale::en_Dsrt" : { + "file" : "lib/DateTime/Locale/en_Dsrt.pm", + "version" : 0 + }, + "DateTime::Locale::en_Dsrt_US" : { + "file" : "lib/DateTime/Locale/en_Dsrt_US.pm", + "version" : 0 + }, + "DateTime::Locale::en_GB" : { + "file" : "lib/DateTime/Locale/en_GB.pm", + "version" : 0 + }, + "DateTime::Locale::en_GU" : { + "file" : "lib/DateTime/Locale/en_GU.pm", + "version" : 0 + }, + "DateTime::Locale::en_HK" : { + "file" : "lib/DateTime/Locale/en_HK.pm", + "version" : 0 + }, + "DateTime::Locale::en_IE" : { + "file" : "lib/DateTime/Locale/en_IE.pm", + "version" : 0 + }, + "DateTime::Locale::en_IN" : { + "file" : "lib/DateTime/Locale/en_IN.pm", + "version" : 0 + }, + "DateTime::Locale::en_JM" : { + "file" : "lib/DateTime/Locale/en_JM.pm", + "version" : 0 + }, + "DateTime::Locale::en_MH" : { + "file" : "lib/DateTime/Locale/en_MH.pm", + "version" : 0 + }, + "DateTime::Locale::en_MP" : { + "file" : "lib/DateTime/Locale/en_MP.pm", + "version" : 0 + }, + "DateTime::Locale::en_MT" : { + "file" : "lib/DateTime/Locale/en_MT.pm", + "version" : 0 + }, + "DateTime::Locale::en_NA" : { + "file" : "lib/DateTime/Locale/en_NA.pm", + "version" : 0 + }, + "DateTime::Locale::en_NZ" : { + "file" : "lib/DateTime/Locale/en_NZ.pm", + "version" : 0 + }, + "DateTime::Locale::en_PH" : { + "file" : "lib/DateTime/Locale/en_PH.pm", + "version" : 0 + }, + "DateTime::Locale::en_PK" : { + "file" : "lib/DateTime/Locale/en_PK.pm", + "version" : 0 + }, + "DateTime::Locale::en_SG" : { + "file" : "lib/DateTime/Locale/en_SG.pm", + "version" : 0 + }, + "DateTime::Locale::en_Shaw" : { + "file" : "lib/DateTime/Locale/en_Shaw.pm", + "version" : 0 + }, + "DateTime::Locale::en_TT" : { + "file" : "lib/DateTime/Locale/en_TT.pm", + "version" : 0 + }, + "DateTime::Locale::en_UM" : { + "file" : "lib/DateTime/Locale/en_UM.pm", + "version" : 0 + }, + "DateTime::Locale::en_US" : { + "file" : "lib/DateTime/Locale/en_US.pm", + "version" : 0 + }, + "DateTime::Locale::en_US_POSIX" : { + "file" : "lib/DateTime/Locale/en_US_POSIX.pm", + "version" : 0 + }, + "DateTime::Locale::en_VI" : { + "file" : "lib/DateTime/Locale/en_VI.pm", + "version" : 0 + }, + "DateTime::Locale::en_ZA" : { + "file" : "lib/DateTime/Locale/en_ZA.pm", + "version" : 0 + }, + "DateTime::Locale::en_ZW" : { + "file" : "lib/DateTime/Locale/en_ZW.pm", + "version" : 0 + }, + "DateTime::Locale::eo" : { + "file" : "lib/DateTime/Locale/eo.pm", + "version" : 0 + }, + "DateTime::Locale::es" : { + "file" : "lib/DateTime/Locale/es.pm", + "version" : 0 + }, + "DateTime::Locale::es_AR" : { + "file" : "lib/DateTime/Locale/es_AR.pm", + "version" : 0 + }, + "DateTime::Locale::es_BO" : { + "file" : "lib/DateTime/Locale/es_BO.pm", + "version" : 0 + }, + "DateTime::Locale::es_CL" : { + "file" : "lib/DateTime/Locale/es_CL.pm", + "version" : 0 + }, + "DateTime::Locale::es_CO" : { + "file" : "lib/DateTime/Locale/es_CO.pm", + "version" : 0 + }, + "DateTime::Locale::es_CR" : { + "file" : "lib/DateTime/Locale/es_CR.pm", + "version" : 0 + }, + "DateTime::Locale::es_DO" : { + "file" : "lib/DateTime/Locale/es_DO.pm", + "version" : 0 + }, + "DateTime::Locale::es_EC" : { + "file" : "lib/DateTime/Locale/es_EC.pm", + "version" : 0 + }, + "DateTime::Locale::es_ES" : { + "file" : "lib/DateTime/Locale/es_ES.pm", + "version" : 0 + }, + "DateTime::Locale::es_GT" : { + "file" : "lib/DateTime/Locale/es_GT.pm", + "version" : 0 + }, + "DateTime::Locale::es_HN" : { + "file" : "lib/DateTime/Locale/es_HN.pm", + "version" : 0 + }, + "DateTime::Locale::es_MX" : { + "file" : "lib/DateTime/Locale/es_MX.pm", + "version" : 0 + }, + "DateTime::Locale::es_NI" : { + "file" : "lib/DateTime/Locale/es_NI.pm", + "version" : 0 + }, + "DateTime::Locale::es_PA" : { + "file" : "lib/DateTime/Locale/es_PA.pm", + "version" : 0 + }, + "DateTime::Locale::es_PE" : { + "file" : "lib/DateTime/Locale/es_PE.pm", + "version" : 0 + }, + "DateTime::Locale::es_PR" : { + "file" : "lib/DateTime/Locale/es_PR.pm", + "version" : 0 + }, + "DateTime::Locale::es_PY" : { + "file" : "lib/DateTime/Locale/es_PY.pm", + "version" : 0 + }, + "DateTime::Locale::es_SV" : { + "file" : "lib/DateTime/Locale/es_SV.pm", + "version" : 0 + }, + "DateTime::Locale::es_US" : { + "file" : "lib/DateTime/Locale/es_US.pm", + "version" : 0 + }, + "DateTime::Locale::es_UY" : { + "file" : "lib/DateTime/Locale/es_UY.pm", + "version" : 0 + }, + "DateTime::Locale::es_VE" : { + "file" : "lib/DateTime/Locale/es_VE.pm", + "version" : 0 + }, + "DateTime::Locale::et" : { + "file" : "lib/DateTime/Locale/et.pm", + "version" : 0 + }, + "DateTime::Locale::et_EE" : { + "file" : "lib/DateTime/Locale/et_EE.pm", + "version" : 0 + }, + "DateTime::Locale::eu" : { + "file" : "lib/DateTime/Locale/eu.pm", + "version" : 0 + }, + "DateTime::Locale::eu_ES" : { + "file" : "lib/DateTime/Locale/eu_ES.pm", + "version" : 0 + }, + "DateTime::Locale::fa" : { + "file" : "lib/DateTime/Locale/fa.pm", + "version" : 0 + }, + "DateTime::Locale::fa_AF" : { + "file" : "lib/DateTime/Locale/fa_AF.pm", + "version" : 0 + }, + "DateTime::Locale::fa_IR" : { + "file" : "lib/DateTime/Locale/fa_IR.pm", + "version" : 0 + }, + "DateTime::Locale::fi" : { + "file" : "lib/DateTime/Locale/fi.pm", + "version" : 0 + }, + "DateTime::Locale::fi_FI" : { + "file" : "lib/DateTime/Locale/fi_FI.pm", + "version" : 0 + }, + "DateTime::Locale::fil" : { + "file" : "lib/DateTime/Locale/fil.pm", + "version" : 0 + }, + "DateTime::Locale::fil_PH" : { + "file" : "lib/DateTime/Locale/fil_PH.pm", + "version" : 0 + }, + "DateTime::Locale::fo" : { + "file" : "lib/DateTime/Locale/fo.pm", + "version" : 0 + }, + "DateTime::Locale::fo_FO" : { + "file" : "lib/DateTime/Locale/fo_FO.pm", + "version" : 0 + }, + "DateTime::Locale::fr" : { + "file" : "lib/DateTime/Locale/fr.pm", + "version" : 0 + }, + "DateTime::Locale::fr_BE" : { + "file" : "lib/DateTime/Locale/fr_BE.pm", + "version" : 0 + }, + "DateTime::Locale::fr_CA" : { + "file" : "lib/DateTime/Locale/fr_CA.pm", + "version" : 0 + }, + "DateTime::Locale::fr_CH" : { + "file" : "lib/DateTime/Locale/fr_CH.pm", + "version" : 0 + }, + "DateTime::Locale::fr_FR" : { + "file" : "lib/DateTime/Locale/fr_FR.pm", + "version" : 0 + }, + "DateTime::Locale::fr_LU" : { + "file" : "lib/DateTime/Locale/fr_LU.pm", + "version" : 0 + }, + "DateTime::Locale::fr_MC" : { + "file" : "lib/DateTime/Locale/fr_MC.pm", + "version" : 0 + }, + "DateTime::Locale::fr_SN" : { + "file" : "lib/DateTime/Locale/fr_SN.pm", + "version" : 0 + }, + "DateTime::Locale::fur" : { + "file" : "lib/DateTime/Locale/fur.pm", + "version" : 0 + }, + "DateTime::Locale::fur_IT" : { + "file" : "lib/DateTime/Locale/fur_IT.pm", + "version" : 0 + }, + "DateTime::Locale::ga" : { + "file" : "lib/DateTime/Locale/ga.pm", + "version" : 0 + }, + "DateTime::Locale::ga_IE" : { + "file" : "lib/DateTime/Locale/ga_IE.pm", + "version" : 0 + }, + "DateTime::Locale::gaa" : { + "file" : "lib/DateTime/Locale/gaa.pm", + "version" : 0 + }, + "DateTime::Locale::gaa_GH" : { + "file" : "lib/DateTime/Locale/gaa_GH.pm", + "version" : 0 + }, + "DateTime::Locale::gez" : { + "file" : "lib/DateTime/Locale/gez.pm", + "version" : 0 + }, + "DateTime::Locale::gez_ER" : { + "file" : "lib/DateTime/Locale/gez_ER.pm", + "version" : 0 + }, + "DateTime::Locale::gez_ET" : { + "file" : "lib/DateTime/Locale/gez_ET.pm", + "version" : 0 + }, + "DateTime::Locale::gl" : { + "file" : "lib/DateTime/Locale/gl.pm", + "version" : 0 + }, + "DateTime::Locale::gl_ES" : { + "file" : "lib/DateTime/Locale/gl_ES.pm", + "version" : 0 + }, + "DateTime::Locale::gsw" : { + "file" : "lib/DateTime/Locale/gsw.pm", + "version" : 0 + }, + "DateTime::Locale::gsw_CH" : { + "file" : "lib/DateTime/Locale/gsw_CH.pm", + "version" : 0 + }, + "DateTime::Locale::gu" : { + "file" : "lib/DateTime/Locale/gu.pm", + "version" : 0 + }, + "DateTime::Locale::gu_IN" : { + "file" : "lib/DateTime/Locale/gu_IN.pm", + "version" : 0 + }, + "DateTime::Locale::gv" : { + "file" : "lib/DateTime/Locale/gv.pm", + "version" : 0 + }, + "DateTime::Locale::gv_GB" : { + "file" : "lib/DateTime/Locale/gv_GB.pm", + "version" : 0 + }, + "DateTime::Locale::ha" : { + "file" : "lib/DateTime/Locale/ha.pm", + "version" : 0 + }, + "DateTime::Locale::ha_Arab" : { + "file" : "lib/DateTime/Locale/ha_Arab.pm", + "version" : 0 + }, + "DateTime::Locale::ha_Arab_NG" : { + "file" : "lib/DateTime/Locale/ha_Arab_NG.pm", + "version" : 0 + }, + "DateTime::Locale::ha_Arab_SD" : { + "file" : "lib/DateTime/Locale/ha_Arab_SD.pm", + "version" : 0 + }, + "DateTime::Locale::ha_GH" : { + "file" : "lib/DateTime/Locale/ha_GH.pm", + "version" : 0 + }, + "DateTime::Locale::ha_Latn" : { + "file" : "lib/DateTime/Locale/ha_Latn.pm", + "version" : 0 + }, + "DateTime::Locale::ha_Latn_GH" : { + "file" : "lib/DateTime/Locale/ha_Latn_GH.pm", + "version" : 0 + }, + "DateTime::Locale::ha_Latn_NE" : { + "file" : "lib/DateTime/Locale/ha_Latn_NE.pm", + "version" : 0 + }, + "DateTime::Locale::ha_Latn_NG" : { + "file" : "lib/DateTime/Locale/ha_Latn_NG.pm", + "version" : 0 + }, + "DateTime::Locale::ha_NE" : { + "file" : "lib/DateTime/Locale/ha_NE.pm", + "version" : 0 + }, + "DateTime::Locale::ha_NG" : { + "file" : "lib/DateTime/Locale/ha_NG.pm", + "version" : 0 + }, + "DateTime::Locale::ha_SD" : { + "file" : "lib/DateTime/Locale/ha_SD.pm", + "version" : 0 + }, + "DateTime::Locale::haw" : { + "file" : "lib/DateTime/Locale/haw.pm", + "version" : 0 + }, + "DateTime::Locale::haw_US" : { + "file" : "lib/DateTime/Locale/haw_US.pm", + "version" : 0 + }, + "DateTime::Locale::he" : { + "file" : "lib/DateTime/Locale/he.pm", + "version" : 0 + }, + "DateTime::Locale::he_IL" : { + "file" : "lib/DateTime/Locale/he_IL.pm", + "version" : 0 + }, + "DateTime::Locale::hi" : { + "file" : "lib/DateTime/Locale/hi.pm", + "version" : 0 + }, + "DateTime::Locale::hi_IN" : { + "file" : "lib/DateTime/Locale/hi_IN.pm", + "version" : 0 + }, + "DateTime::Locale::hr" : { + "file" : "lib/DateTime/Locale/hr.pm", + "version" : 0 + }, + "DateTime::Locale::hr_HR" : { + "file" : "lib/DateTime/Locale/hr_HR.pm", + "version" : 0 + }, + "DateTime::Locale::hu" : { + "file" : "lib/DateTime/Locale/hu.pm", + "version" : 0 + }, + "DateTime::Locale::hu_HU" : { + "file" : "lib/DateTime/Locale/hu_HU.pm", + "version" : 0 + }, + "DateTime::Locale::hy" : { + "file" : "lib/DateTime/Locale/hy.pm", + "version" : 0 + }, + "DateTime::Locale::hy_AM" : { + "file" : "lib/DateTime/Locale/hy_AM.pm", + "version" : 0 + }, + "DateTime::Locale::hy_AM_REVISED" : { + "file" : "lib/DateTime/Locale/hy_AM_REVISED.pm", + "version" : 0 + }, + "DateTime::Locale::ia" : { + "file" : "lib/DateTime/Locale/ia.pm", + "version" : 0 + }, + "DateTime::Locale::id" : { + "file" : "lib/DateTime/Locale/id.pm", + "version" : 0 + }, + "DateTime::Locale::id_ID" : { + "file" : "lib/DateTime/Locale/id_ID.pm", + "version" : 0 + }, + "DateTime::Locale::ig" : { + "file" : "lib/DateTime/Locale/ig.pm", + "version" : 0 + }, + "DateTime::Locale::ig_NG" : { + "file" : "lib/DateTime/Locale/ig_NG.pm", + "version" : 0 + }, + "DateTime::Locale::ii" : { + "file" : "lib/DateTime/Locale/ii.pm", + "version" : 0 + }, + "DateTime::Locale::ii_CN" : { + "file" : "lib/DateTime/Locale/ii_CN.pm", + "version" : 0 + }, + "DateTime::Locale::is" : { + "file" : "lib/DateTime/Locale/is.pm", + "version" : 0 + }, + "DateTime::Locale::is_IS" : { + "file" : "lib/DateTime/Locale/is_IS.pm", + "version" : 0 + }, + "DateTime::Locale::it" : { + "file" : "lib/DateTime/Locale/it.pm", + "version" : 0 + }, + "DateTime::Locale::it_CH" : { + "file" : "lib/DateTime/Locale/it_CH.pm", + "version" : 0 + }, + "DateTime::Locale::it_IT" : { + "file" : "lib/DateTime/Locale/it_IT.pm", + "version" : 0 + }, + "DateTime::Locale::iu" : { + "file" : "lib/DateTime/Locale/iu.pm", + "version" : 0 + }, + "DateTime::Locale::ja" : { + "file" : "lib/DateTime/Locale/ja.pm", + "version" : 0 + }, + "DateTime::Locale::ja_JP" : { + "file" : "lib/DateTime/Locale/ja_JP.pm", + "version" : 0 + }, + "DateTime::Locale::ka" : { + "file" : "lib/DateTime/Locale/ka.pm", + "version" : 0 + }, + "DateTime::Locale::ka_GE" : { + "file" : "lib/DateTime/Locale/ka_GE.pm", + "version" : 0 + }, + "DateTime::Locale::kaj" : { + "file" : "lib/DateTime/Locale/kaj.pm", + "version" : 0 + }, + "DateTime::Locale::kaj_NG" : { + "file" : "lib/DateTime/Locale/kaj_NG.pm", + "version" : 0 + }, + "DateTime::Locale::kam" : { + "file" : "lib/DateTime/Locale/kam.pm", + "version" : 0 + }, + "DateTime::Locale::kam_KE" : { + "file" : "lib/DateTime/Locale/kam_KE.pm", + "version" : 0 + }, + "DateTime::Locale::kcg" : { + "file" : "lib/DateTime/Locale/kcg.pm", + "version" : 0 + }, + "DateTime::Locale::kcg_NG" : { + "file" : "lib/DateTime/Locale/kcg_NG.pm", + "version" : 0 + }, + "DateTime::Locale::kfo" : { + "file" : "lib/DateTime/Locale/kfo.pm", + "version" : 0 + }, + "DateTime::Locale::kfo_CI" : { + "file" : "lib/DateTime/Locale/kfo_CI.pm", + "version" : 0 + }, + "DateTime::Locale::kk" : { + "file" : "lib/DateTime/Locale/kk.pm", + "version" : 0 + }, + "DateTime::Locale::kk_Cyrl" : { + "file" : "lib/DateTime/Locale/kk_Cyrl.pm", + "version" : 0 + }, + "DateTime::Locale::kk_Cyrl_KZ" : { + "file" : "lib/DateTime/Locale/kk_Cyrl_KZ.pm", + "version" : 0 + }, + "DateTime::Locale::kk_KZ" : { + "file" : "lib/DateTime/Locale/kk_KZ.pm", + "version" : 0 + }, + "DateTime::Locale::kl" : { + "file" : "lib/DateTime/Locale/kl.pm", + "version" : 0 + }, + "DateTime::Locale::kl_GL" : { + "file" : "lib/DateTime/Locale/kl_GL.pm", + "version" : 0 + }, + "DateTime::Locale::km" : { + "file" : "lib/DateTime/Locale/km.pm", + "version" : 0 + }, + "DateTime::Locale::km_KH" : { + "file" : "lib/DateTime/Locale/km_KH.pm", + "version" : 0 + }, + "DateTime::Locale::kn" : { + "file" : "lib/DateTime/Locale/kn.pm", + "version" : 0 + }, + "DateTime::Locale::kn_IN" : { + "file" : "lib/DateTime/Locale/kn_IN.pm", + "version" : 0 + }, + "DateTime::Locale::ko" : { + "file" : "lib/DateTime/Locale/ko.pm", + "version" : 0 + }, + "DateTime::Locale::ko_KR" : { + "file" : "lib/DateTime/Locale/ko_KR.pm", + "version" : 0 + }, + "DateTime::Locale::kok" : { + "file" : "lib/DateTime/Locale/kok.pm", + "version" : 0 + }, + "DateTime::Locale::kok_IN" : { + "file" : "lib/DateTime/Locale/kok_IN.pm", + "version" : 0 + }, + "DateTime::Locale::kpe" : { + "file" : "lib/DateTime/Locale/kpe.pm", + "version" : 0 + }, + "DateTime::Locale::kpe_GN" : { + "file" : "lib/DateTime/Locale/kpe_GN.pm", + "version" : 0 + }, + "DateTime::Locale::kpe_LR" : { + "file" : "lib/DateTime/Locale/kpe_LR.pm", + "version" : 0 + }, + "DateTime::Locale::ku" : { + "file" : "lib/DateTime/Locale/ku.pm", + "version" : 0 + }, + "DateTime::Locale::ku_Arab" : { + "file" : "lib/DateTime/Locale/ku_Arab.pm", + "version" : 0 + }, + "DateTime::Locale::ku_Arab_IQ" : { + "file" : "lib/DateTime/Locale/ku_Arab_IQ.pm", + "version" : 0 + }, + "DateTime::Locale::ku_Arab_IR" : { + "file" : "lib/DateTime/Locale/ku_Arab_IR.pm", + "version" : 0 + }, + "DateTime::Locale::ku_Arab_SY" : { + "file" : "lib/DateTime/Locale/ku_Arab_SY.pm", + "version" : 0 + }, + "DateTime::Locale::ku_IQ" : { + "file" : "lib/DateTime/Locale/ku_IQ.pm", + "version" : 0 + }, + "DateTime::Locale::ku_IR" : { + "file" : "lib/DateTime/Locale/ku_IR.pm", + "version" : 0 + }, + "DateTime::Locale::ku_Latn" : { + "file" : "lib/DateTime/Locale/ku_Latn.pm", + "version" : 0 + }, + "DateTime::Locale::ku_Latn_TR" : { + "file" : "lib/DateTime/Locale/ku_Latn_TR.pm", + "version" : 0 + }, + "DateTime::Locale::ku_SY" : { + "file" : "lib/DateTime/Locale/ku_SY.pm", + "version" : 0 + }, + "DateTime::Locale::ku_TR" : { + "file" : "lib/DateTime/Locale/ku_TR.pm", + "version" : 0 + }, + "DateTime::Locale::kw" : { + "file" : "lib/DateTime/Locale/kw.pm", + "version" : 0 + }, + "DateTime::Locale::kw_GB" : { + "file" : "lib/DateTime/Locale/kw_GB.pm", + "version" : 0 + }, + "DateTime::Locale::ky" : { + "file" : "lib/DateTime/Locale/ky.pm", + "version" : 0 + }, + "DateTime::Locale::ky_KG" : { + "file" : "lib/DateTime/Locale/ky_KG.pm", + "version" : 0 + }, + "DateTime::Locale::ln" : { + "file" : "lib/DateTime/Locale/ln.pm", + "version" : 0 + }, + "DateTime::Locale::ln_CD" : { + "file" : "lib/DateTime/Locale/ln_CD.pm", + "version" : 0 + }, + "DateTime::Locale::ln_CG" : { + "file" : "lib/DateTime/Locale/ln_CG.pm", + "version" : 0 + }, + "DateTime::Locale::lo" : { + "file" : "lib/DateTime/Locale/lo.pm", + "version" : 0 + }, + "DateTime::Locale::lo_LA" : { + "file" : "lib/DateTime/Locale/lo_LA.pm", + "version" : 0 + }, + "DateTime::Locale::lt" : { + "file" : "lib/DateTime/Locale/lt.pm", + "version" : 0 + }, + "DateTime::Locale::lt_LT" : { + "file" : "lib/DateTime/Locale/lt_LT.pm", + "version" : 0 + }, + "DateTime::Locale::lv" : { + "file" : "lib/DateTime/Locale/lv.pm", + "version" : 0 + }, + "DateTime::Locale::lv_LV" : { + "file" : "lib/DateTime/Locale/lv_LV.pm", + "version" : 0 + }, + "DateTime::Locale::mk" : { + "file" : "lib/DateTime/Locale/mk.pm", + "version" : 0 + }, + "DateTime::Locale::mk_MK" : { + "file" : "lib/DateTime/Locale/mk_MK.pm", + "version" : 0 + }, + "DateTime::Locale::ml" : { + "file" : "lib/DateTime/Locale/ml.pm", + "version" : 0 + }, + "DateTime::Locale::ml_IN" : { + "file" : "lib/DateTime/Locale/ml_IN.pm", + "version" : 0 + }, + "DateTime::Locale::mn" : { + "file" : "lib/DateTime/Locale/mn.pm", + "version" : 0 + }, + "DateTime::Locale::mn_CN" : { + "file" : "lib/DateTime/Locale/mn_CN.pm", + "version" : 0 + }, + "DateTime::Locale::mn_Cyrl" : { + "file" : "lib/DateTime/Locale/mn_Cyrl.pm", + "version" : 0 + }, + "DateTime::Locale::mn_Cyrl_MN" : { + "file" : "lib/DateTime/Locale/mn_Cyrl_MN.pm", + "version" : 0 + }, + "DateTime::Locale::mn_MN" : { + "file" : "lib/DateTime/Locale/mn_MN.pm", + "version" : 0 + }, + "DateTime::Locale::mn_Mong" : { + "file" : "lib/DateTime/Locale/mn_Mong.pm", + "version" : 0 + }, + "DateTime::Locale::mn_Mong_CN" : { + "file" : "lib/DateTime/Locale/mn_Mong_CN.pm", + "version" : 0 + }, + "DateTime::Locale::mo" : { + "file" : "lib/DateTime/Locale/mo.pm", + "version" : 0 + }, + "DateTime::Locale::mr" : { + "file" : "lib/DateTime/Locale/mr.pm", + "version" : 0 + }, + "DateTime::Locale::mr_IN" : { + "file" : "lib/DateTime/Locale/mr_IN.pm", + "version" : 0 + }, + "DateTime::Locale::ms" : { + "file" : "lib/DateTime/Locale/ms.pm", + "version" : 0 + }, + "DateTime::Locale::ms_BN" : { + "file" : "lib/DateTime/Locale/ms_BN.pm", + "version" : 0 + }, + "DateTime::Locale::ms_MY" : { + "file" : "lib/DateTime/Locale/ms_MY.pm", + "version" : 0 + }, + "DateTime::Locale::mt" : { + "file" : "lib/DateTime/Locale/mt.pm", + "version" : 0 + }, + "DateTime::Locale::mt_MT" : { + "file" : "lib/DateTime/Locale/mt_MT.pm", + "version" : 0 + }, + "DateTime::Locale::my" : { + "file" : "lib/DateTime/Locale/my.pm", + "version" : 0 + }, + "DateTime::Locale::my_MM" : { + "file" : "lib/DateTime/Locale/my_MM.pm", + "version" : 0 + }, + "DateTime::Locale::nb" : { + "file" : "lib/DateTime/Locale/nb.pm", + "version" : 0 + }, + "DateTime::Locale::nb_NO" : { + "file" : "lib/DateTime/Locale/nb_NO.pm", + "version" : 0 + }, + "DateTime::Locale::nds" : { + "file" : "lib/DateTime/Locale/nds.pm", + "version" : 0 + }, + "DateTime::Locale::nds_DE" : { + "file" : "lib/DateTime/Locale/nds_DE.pm", + "version" : 0 + }, + "DateTime::Locale::ne" : { + "file" : "lib/DateTime/Locale/ne.pm", + "version" : 0 + }, + "DateTime::Locale::ne_IN" : { + "file" : "lib/DateTime/Locale/ne_IN.pm", + "version" : 0 + }, + "DateTime::Locale::ne_NP" : { + "file" : "lib/DateTime/Locale/ne_NP.pm", + "version" : 0 + }, + "DateTime::Locale::nl" : { + "file" : "lib/DateTime/Locale/nl.pm", + "version" : 0 + }, + "DateTime::Locale::nl_BE" : { + "file" : "lib/DateTime/Locale/nl_BE.pm", + "version" : 0 + }, + "DateTime::Locale::nl_NL" : { + "file" : "lib/DateTime/Locale/nl_NL.pm", + "version" : 0 + }, + "DateTime::Locale::nn" : { + "file" : "lib/DateTime/Locale/nn.pm", + "version" : 0 + }, + "DateTime::Locale::nn_NO" : { + "file" : "lib/DateTime/Locale/nn_NO.pm", + "version" : 0 + }, + "DateTime::Locale::no" : { + "file" : "lib/DateTime/Locale/no.pm", + "version" : 0 + }, + "DateTime::Locale::nr" : { + "file" : "lib/DateTime/Locale/nr.pm", + "version" : 0 + }, + "DateTime::Locale::nr_ZA" : { + "file" : "lib/DateTime/Locale/nr_ZA.pm", + "version" : 0 + }, + "DateTime::Locale::nso" : { + "file" : "lib/DateTime/Locale/nso.pm", + "version" : 0 + }, + "DateTime::Locale::nso_ZA" : { + "file" : "lib/DateTime/Locale/nso_ZA.pm", + "version" : 0 + }, + "DateTime::Locale::ny" : { + "file" : "lib/DateTime/Locale/ny.pm", + "version" : 0 + }, + "DateTime::Locale::ny_MW" : { + "file" : "lib/DateTime/Locale/ny_MW.pm", + "version" : 0 + }, + "DateTime::Locale::oc" : { + "file" : "lib/DateTime/Locale/oc.pm", + "version" : 0 + }, + "DateTime::Locale::oc_FR" : { + "file" : "lib/DateTime/Locale/oc_FR.pm", + "version" : 0 + }, + "DateTime::Locale::om" : { + "file" : "lib/DateTime/Locale/om.pm", + "version" : 0 + }, + "DateTime::Locale::om_ET" : { + "file" : "lib/DateTime/Locale/om_ET.pm", + "version" : 0 + }, + "DateTime::Locale::om_KE" : { + "file" : "lib/DateTime/Locale/om_KE.pm", + "version" : 0 + }, + "DateTime::Locale::or" : { + "file" : "lib/DateTime/Locale/or.pm", + "version" : 0 + }, + "DateTime::Locale::or_IN" : { + "file" : "lib/DateTime/Locale/or_IN.pm", + "version" : 0 + }, + "DateTime::Locale::pa" : { + "file" : "lib/DateTime/Locale/pa.pm", + "version" : 0 + }, + "DateTime::Locale::pa_Arab" : { + "file" : "lib/DateTime/Locale/pa_Arab.pm", + "version" : 0 + }, + "DateTime::Locale::pa_Arab_PK" : { + "file" : "lib/DateTime/Locale/pa_Arab_PK.pm", + "version" : 0 + }, + "DateTime::Locale::pa_Guru" : { + "file" : "lib/DateTime/Locale/pa_Guru.pm", + "version" : 0 + }, + "DateTime::Locale::pa_Guru_IN" : { + "file" : "lib/DateTime/Locale/pa_Guru_IN.pm", + "version" : 0 + }, + "DateTime::Locale::pa_IN" : { + "file" : "lib/DateTime/Locale/pa_IN.pm", + "version" : 0 + }, + "DateTime::Locale::pa_PK" : { + "file" : "lib/DateTime/Locale/pa_PK.pm", + "version" : 0 + }, + "DateTime::Locale::pl" : { + "file" : "lib/DateTime/Locale/pl.pm", + "version" : 0 + }, + "DateTime::Locale::pl_PL" : { + "file" : "lib/DateTime/Locale/pl_PL.pm", + "version" : 0 + }, + "DateTime::Locale::ps" : { + "file" : "lib/DateTime/Locale/ps.pm", + "version" : 0 + }, + "DateTime::Locale::ps_AF" : { + "file" : "lib/DateTime/Locale/ps_AF.pm", + "version" : 0 + }, + "DateTime::Locale::pt" : { + "file" : "lib/DateTime/Locale/pt.pm", + "version" : 0 + }, + "DateTime::Locale::pt_BR" : { + "file" : "lib/DateTime/Locale/pt_BR.pm", + "version" : 0 + }, + "DateTime::Locale::pt_PT" : { + "file" : "lib/DateTime/Locale/pt_PT.pm", + "version" : 0 + }, + "DateTime::Locale::ro" : { + "file" : "lib/DateTime/Locale/ro.pm", + "version" : 0 + }, + "DateTime::Locale::ro_MD" : { + "file" : "lib/DateTime/Locale/ro_MD.pm", + "version" : 0 + }, + "DateTime::Locale::ro_RO" : { + "file" : "lib/DateTime/Locale/ro_RO.pm", + "version" : 0 + }, + "DateTime::Locale::root" : { + "file" : "lib/DateTime/Locale/root.pm", + "version" : 0 + }, + "DateTime::Locale::ru" : { + "file" : "lib/DateTime/Locale/ru.pm", + "version" : 0 + }, + "DateTime::Locale::ru_RU" : { + "file" : "lib/DateTime/Locale/ru_RU.pm", + "version" : 0 + }, + "DateTime::Locale::ru_UA" : { + "file" : "lib/DateTime/Locale/ru_UA.pm", + "version" : 0 + }, + "DateTime::Locale::rw" : { + "file" : "lib/DateTime/Locale/rw.pm", + "version" : 0 + }, + "DateTime::Locale::rw_RW" : { + "file" : "lib/DateTime/Locale/rw_RW.pm", + "version" : 0 + }, + "DateTime::Locale::sa" : { + "file" : "lib/DateTime/Locale/sa.pm", + "version" : 0 + }, + "DateTime::Locale::sa_IN" : { + "file" : "lib/DateTime/Locale/sa_IN.pm", + "version" : 0 + }, + "DateTime::Locale::se" : { + "file" : "lib/DateTime/Locale/se.pm", + "version" : 0 + }, + "DateTime::Locale::se_FI" : { + "file" : "lib/DateTime/Locale/se_FI.pm", + "version" : 0 + }, + "DateTime::Locale::se_NO" : { + "file" : "lib/DateTime/Locale/se_NO.pm", + "version" : 0 + }, + "DateTime::Locale::sh" : { + "file" : "lib/DateTime/Locale/sh.pm", + "version" : 0 + }, + "DateTime::Locale::sh_BA" : { + "file" : "lib/DateTime/Locale/sh_BA.pm", + "version" : 0 + }, + "DateTime::Locale::sh_CS" : { + "file" : "lib/DateTime/Locale/sh_CS.pm", + "version" : 0 + }, + "DateTime::Locale::sh_YU" : { + "file" : "lib/DateTime/Locale/sh_YU.pm", + "version" : 0 + }, + "DateTime::Locale::si" : { + "file" : "lib/DateTime/Locale/si.pm", + "version" : 0 + }, + "DateTime::Locale::si_LK" : { + "file" : "lib/DateTime/Locale/si_LK.pm", + "version" : 0 + }, + "DateTime::Locale::sid" : { + "file" : "lib/DateTime/Locale/sid.pm", + "version" : 0 + }, + "DateTime::Locale::sid_ET" : { + "file" : "lib/DateTime/Locale/sid_ET.pm", + "version" : 0 + }, + "DateTime::Locale::sk" : { + "file" : "lib/DateTime/Locale/sk.pm", + "version" : 0 + }, + "DateTime::Locale::sk_SK" : { + "file" : "lib/DateTime/Locale/sk_SK.pm", + "version" : 0 + }, + "DateTime::Locale::sl" : { + "file" : "lib/DateTime/Locale/sl.pm", + "version" : 0 + }, + "DateTime::Locale::sl_SI" : { + "file" : "lib/DateTime/Locale/sl_SI.pm", + "version" : 0 + }, + "DateTime::Locale::so" : { + "file" : "lib/DateTime/Locale/so.pm", + "version" : 0 + }, + "DateTime::Locale::so_DJ" : { + "file" : "lib/DateTime/Locale/so_DJ.pm", + "version" : 0 + }, + "DateTime::Locale::so_ET" : { + "file" : "lib/DateTime/Locale/so_ET.pm", + "version" : 0 + }, + "DateTime::Locale::so_KE" : { + "file" : "lib/DateTime/Locale/so_KE.pm", + "version" : 0 + }, + "DateTime::Locale::so_SO" : { + "file" : "lib/DateTime/Locale/so_SO.pm", + "version" : 0 + }, + "DateTime::Locale::sq" : { + "file" : "lib/DateTime/Locale/sq.pm", + "version" : 0 + }, + "DateTime::Locale::sq_AL" : { + "file" : "lib/DateTime/Locale/sq_AL.pm", + "version" : 0 + }, + "DateTime::Locale::sr" : { + "file" : "lib/DateTime/Locale/sr.pm", + "version" : 0 + }, + "DateTime::Locale::sr_BA" : { + "file" : "lib/DateTime/Locale/sr_BA.pm", + "version" : 0 + }, + "DateTime::Locale::sr_CS" : { + "file" : "lib/DateTime/Locale/sr_CS.pm", + "version" : 0 + }, + "DateTime::Locale::sr_Cyrl" : { + "file" : "lib/DateTime/Locale/sr_Cyrl.pm", + "version" : 0 + }, + "DateTime::Locale::sr_Cyrl_BA" : { + "file" : "lib/DateTime/Locale/sr_Cyrl_BA.pm", + "version" : 0 + }, + "DateTime::Locale::sr_Cyrl_CS" : { + "file" : "lib/DateTime/Locale/sr_Cyrl_CS.pm", + "version" : 0 + }, + "DateTime::Locale::sr_Cyrl_ME" : { + "file" : "lib/DateTime/Locale/sr_Cyrl_ME.pm", + "version" : 0 + }, + "DateTime::Locale::sr_Cyrl_RS" : { + "file" : "lib/DateTime/Locale/sr_Cyrl_RS.pm", + "version" : 0 + }, + "DateTime::Locale::sr_Cyrl_YU" : { + "file" : "lib/DateTime/Locale/sr_Cyrl_YU.pm", + "version" : 0 + }, + "DateTime::Locale::sr_Latn" : { + "file" : "lib/DateTime/Locale/sr_Latn.pm", + "version" : 0 + }, + "DateTime::Locale::sr_Latn_BA" : { + "file" : "lib/DateTime/Locale/sr_Latn_BA.pm", + "version" : 0 + }, + "DateTime::Locale::sr_Latn_CS" : { + "file" : "lib/DateTime/Locale/sr_Latn_CS.pm", + "version" : 0 + }, + "DateTime::Locale::sr_Latn_ME" : { + "file" : "lib/DateTime/Locale/sr_Latn_ME.pm", + "version" : 0 + }, + "DateTime::Locale::sr_Latn_RS" : { + "file" : "lib/DateTime/Locale/sr_Latn_RS.pm", + "version" : 0 + }, + "DateTime::Locale::sr_Latn_YU" : { + "file" : "lib/DateTime/Locale/sr_Latn_YU.pm", + "version" : 0 + }, + "DateTime::Locale::sr_ME" : { + "file" : "lib/DateTime/Locale/sr_ME.pm", + "version" : 0 + }, + "DateTime::Locale::sr_RS" : { + "file" : "lib/DateTime/Locale/sr_RS.pm", + "version" : 0 + }, + "DateTime::Locale::sr_YU" : { + "file" : "lib/DateTime/Locale/sr_YU.pm", + "version" : 0 + }, + "DateTime::Locale::ss" : { + "file" : "lib/DateTime/Locale/ss.pm", + "version" : 0 + }, + "DateTime::Locale::ss_SZ" : { + "file" : "lib/DateTime/Locale/ss_SZ.pm", + "version" : 0 + }, + "DateTime::Locale::ss_ZA" : { + "file" : "lib/DateTime/Locale/ss_ZA.pm", + "version" : 0 + }, + "DateTime::Locale::st" : { + "file" : "lib/DateTime/Locale/st.pm", + "version" : 0 + }, + "DateTime::Locale::st_LS" : { + "file" : "lib/DateTime/Locale/st_LS.pm", + "version" : 0 + }, + "DateTime::Locale::st_ZA" : { + "file" : "lib/DateTime/Locale/st_ZA.pm", + "version" : 0 + }, + "DateTime::Locale::sv" : { + "file" : "lib/DateTime/Locale/sv.pm", + "version" : 0 + }, + "DateTime::Locale::sv_FI" : { + "file" : "lib/DateTime/Locale/sv_FI.pm", + "version" : 0 + }, + "DateTime::Locale::sv_SE" : { + "file" : "lib/DateTime/Locale/sv_SE.pm", + "version" : 0 + }, + "DateTime::Locale::sw" : { + "file" : "lib/DateTime/Locale/sw.pm", + "version" : 0 + }, + "DateTime::Locale::sw_KE" : { + "file" : "lib/DateTime/Locale/sw_KE.pm", + "version" : 0 + }, + "DateTime::Locale::sw_TZ" : { + "file" : "lib/DateTime/Locale/sw_TZ.pm", + "version" : 0 + }, + "DateTime::Locale::syr" : { + "file" : "lib/DateTime/Locale/syr.pm", + "version" : 0 + }, + "DateTime::Locale::syr_SY" : { + "file" : "lib/DateTime/Locale/syr_SY.pm", + "version" : 0 + }, + "DateTime::Locale::ta" : { + "file" : "lib/DateTime/Locale/ta.pm", + "version" : 0 + }, + "DateTime::Locale::ta_IN" : { + "file" : "lib/DateTime/Locale/ta_IN.pm", + "version" : 0 + }, + "DateTime::Locale::te" : { + "file" : "lib/DateTime/Locale/te.pm", + "version" : 0 + }, + "DateTime::Locale::te_IN" : { + "file" : "lib/DateTime/Locale/te_IN.pm", + "version" : 0 + }, + "DateTime::Locale::tg" : { + "file" : "lib/DateTime/Locale/tg.pm", + "version" : 0 + }, + "DateTime::Locale::tg_Cyrl" : { + "file" : "lib/DateTime/Locale/tg_Cyrl.pm", + "version" : 0 + }, + "DateTime::Locale::tg_Cyrl_TJ" : { + "file" : "lib/DateTime/Locale/tg_Cyrl_TJ.pm", + "version" : 0 + }, + "DateTime::Locale::tg_TJ" : { + "file" : "lib/DateTime/Locale/tg_TJ.pm", + "version" : 0 + }, + "DateTime::Locale::th" : { + "file" : "lib/DateTime/Locale/th.pm", + "version" : 0 + }, + "DateTime::Locale::th_TH" : { + "file" : "lib/DateTime/Locale/th_TH.pm", + "version" : 0 + }, + "DateTime::Locale::ti" : { + "file" : "lib/DateTime/Locale/ti.pm", + "version" : 0 + }, + "DateTime::Locale::ti_ER" : { + "file" : "lib/DateTime/Locale/ti_ER.pm", + "version" : 0 + }, + "DateTime::Locale::ti_ET" : { + "file" : "lib/DateTime/Locale/ti_ET.pm", + "version" : 0 + }, + "DateTime::Locale::tig" : { + "file" : "lib/DateTime/Locale/tig.pm", + "version" : 0 + }, + "DateTime::Locale::tig_ER" : { + "file" : "lib/DateTime/Locale/tig_ER.pm", + "version" : 0 + }, + "DateTime::Locale::tl" : { + "file" : "lib/DateTime/Locale/tl.pm", + "version" : 0 + }, + "DateTime::Locale::tn" : { + "file" : "lib/DateTime/Locale/tn.pm", + "version" : 0 + }, + "DateTime::Locale::tn_ZA" : { + "file" : "lib/DateTime/Locale/tn_ZA.pm", + "version" : 0 + }, + "DateTime::Locale::to" : { + "file" : "lib/DateTime/Locale/to.pm", + "version" : 0 + }, + "DateTime::Locale::to_TO" : { + "file" : "lib/DateTime/Locale/to_TO.pm", + "version" : 0 + }, + "DateTime::Locale::tr" : { + "file" : "lib/DateTime/Locale/tr.pm", + "version" : 0 + }, + "DateTime::Locale::tr_TR" : { + "file" : "lib/DateTime/Locale/tr_TR.pm", + "version" : 0 + }, + "DateTime::Locale::trv" : { + "file" : "lib/DateTime/Locale/trv.pm", + "version" : 0 + }, + "DateTime::Locale::trv_TW" : { + "file" : "lib/DateTime/Locale/trv_TW.pm", + "version" : 0 + }, + "DateTime::Locale::ts" : { + "file" : "lib/DateTime/Locale/ts.pm", + "version" : 0 + }, + "DateTime::Locale::ts_ZA" : { + "file" : "lib/DateTime/Locale/ts_ZA.pm", + "version" : 0 + }, + "DateTime::Locale::tt" : { + "file" : "lib/DateTime/Locale/tt.pm", + "version" : 0 + }, + "DateTime::Locale::tt_RU" : { + "file" : "lib/DateTime/Locale/tt_RU.pm", + "version" : 0 + }, + "DateTime::Locale::ug" : { + "file" : "lib/DateTime/Locale/ug.pm", + "version" : 0 + }, + "DateTime::Locale::ug_Arab" : { + "file" : "lib/DateTime/Locale/ug_Arab.pm", + "version" : 0 + }, + "DateTime::Locale::ug_Arab_CN" : { + "file" : "lib/DateTime/Locale/ug_Arab_CN.pm", + "version" : 0 + }, + "DateTime::Locale::ug_CN" : { + "file" : "lib/DateTime/Locale/ug_CN.pm", + "version" : 0 + }, + "DateTime::Locale::uk" : { + "file" : "lib/DateTime/Locale/uk.pm", + "version" : 0 + }, + "DateTime::Locale::uk_UA" : { + "file" : "lib/DateTime/Locale/uk_UA.pm", + "version" : 0 + }, + "DateTime::Locale::ur" : { + "file" : "lib/DateTime/Locale/ur.pm", + "version" : 0 + }, + "DateTime::Locale::ur_IN" : { + "file" : "lib/DateTime/Locale/ur_IN.pm", + "version" : 0 + }, + "DateTime::Locale::ur_PK" : { + "file" : "lib/DateTime/Locale/ur_PK.pm", + "version" : 0 + }, + "DateTime::Locale::uz" : { + "file" : "lib/DateTime/Locale/uz.pm", + "version" : 0 + }, + "DateTime::Locale::uz_AF" : { + "file" : "lib/DateTime/Locale/uz_AF.pm", + "version" : 0 + }, + "DateTime::Locale::uz_Arab" : { + "file" : "lib/DateTime/Locale/uz_Arab.pm", + "version" : 0 + }, + "DateTime::Locale::uz_Arab_AF" : { + "file" : "lib/DateTime/Locale/uz_Arab_AF.pm", + "version" : 0 + }, + "DateTime::Locale::uz_Cyrl" : { + "file" : "lib/DateTime/Locale/uz_Cyrl.pm", + "version" : 0 + }, + "DateTime::Locale::uz_Cyrl_UZ" : { + "file" : "lib/DateTime/Locale/uz_Cyrl_UZ.pm", + "version" : 0 + }, + "DateTime::Locale::uz_Latn" : { + "file" : "lib/DateTime/Locale/uz_Latn.pm", + "version" : 0 + }, + "DateTime::Locale::uz_Latn_UZ" : { + "file" : "lib/DateTime/Locale/uz_Latn_UZ.pm", + "version" : 0 + }, + "DateTime::Locale::uz_UZ" : { + "file" : "lib/DateTime/Locale/uz_UZ.pm", + "version" : 0 + }, + "DateTime::Locale::ve" : { + "file" : "lib/DateTime/Locale/ve.pm", + "version" : 0 + }, + "DateTime::Locale::ve_ZA" : { + "file" : "lib/DateTime/Locale/ve_ZA.pm", + "version" : 0 + }, + "DateTime::Locale::vi" : { + "file" : "lib/DateTime/Locale/vi.pm", + "version" : 0 + }, + "DateTime::Locale::vi_VN" : { + "file" : "lib/DateTime/Locale/vi_VN.pm", + "version" : 0 + }, + "DateTime::Locale::wal" : { + "file" : "lib/DateTime/Locale/wal.pm", + "version" : 0 + }, + "DateTime::Locale::wal_ET" : { + "file" : "lib/DateTime/Locale/wal_ET.pm", + "version" : 0 + }, + "DateTime::Locale::wo" : { + "file" : "lib/DateTime/Locale/wo.pm", + "version" : 0 + }, + "DateTime::Locale::wo_Latn" : { + "file" : "lib/DateTime/Locale/wo_Latn.pm", + "version" : 0 + }, + "DateTime::Locale::wo_Latn_SN" : { + "file" : "lib/DateTime/Locale/wo_Latn_SN.pm", + "version" : 0 + }, + "DateTime::Locale::wo_SN" : { + "file" : "lib/DateTime/Locale/wo_SN.pm", + "version" : 0 + }, + "DateTime::Locale::xh" : { + "file" : "lib/DateTime/Locale/xh.pm", + "version" : 0 + }, + "DateTime::Locale::xh_ZA" : { + "file" : "lib/DateTime/Locale/xh_ZA.pm", + "version" : 0 + }, + "DateTime::Locale::yo" : { + "file" : "lib/DateTime/Locale/yo.pm", + "version" : 0 + }, + "DateTime::Locale::yo_NG" : { + "file" : "lib/DateTime/Locale/yo_NG.pm", + "version" : 0 + }, + "DateTime::Locale::zh" : { + "file" : "lib/DateTime/Locale/zh.pm", + "version" : 0 + }, + "DateTime::Locale::zh_CN" : { + "file" : "lib/DateTime/Locale/zh_CN.pm", + "version" : 0 + }, + "DateTime::Locale::zh_HK" : { + "file" : "lib/DateTime/Locale/zh_HK.pm", + "version" : 0 + }, + "DateTime::Locale::zh_Hans" : { + "file" : "lib/DateTime/Locale/zh_Hans.pm", + "version" : 0 + }, + "DateTime::Locale::zh_Hans_CN" : { + "file" : "lib/DateTime/Locale/zh_Hans_CN.pm", + "version" : 0 + }, + "DateTime::Locale::zh_Hans_HK" : { + "file" : "lib/DateTime/Locale/zh_Hans_HK.pm", + "version" : 0 + }, + "DateTime::Locale::zh_Hans_MO" : { + "file" : "lib/DateTime/Locale/zh_Hans_MO.pm", + "version" : 0 + }, + "DateTime::Locale::zh_Hans_SG" : { + "file" : "lib/DateTime/Locale/zh_Hans_SG.pm", + "version" : 0 + }, + "DateTime::Locale::zh_Hant" : { + "file" : "lib/DateTime/Locale/zh_Hant.pm", + "version" : 0 + }, + "DateTime::Locale::zh_Hant_HK" : { + "file" : "lib/DateTime/Locale/zh_Hant_HK.pm", + "version" : 0 + }, + "DateTime::Locale::zh_Hant_MO" : { + "file" : "lib/DateTime/Locale/zh_Hant_MO.pm", + "version" : 0 + }, + "DateTime::Locale::zh_Hant_TW" : { + "file" : "lib/DateTime/Locale/zh_Hant_TW.pm", + "version" : 0 + }, + "DateTime::Locale::zh_MO" : { + "file" : "lib/DateTime/Locale/zh_MO.pm", + "version" : 0 + }, + "DateTime::Locale::zh_SG" : { + "file" : "lib/DateTime/Locale/zh_SG.pm", + "version" : 0 + }, + "DateTime::Locale::zh_TW" : { + "file" : "lib/DateTime/Locale/zh_TW.pm", + "version" : 0 + }, + "DateTime::Locale::zu" : { + "file" : "lib/DateTime/Locale/zu.pm", + "version" : 0 + }, + "DateTime::Locale::zu_ZA" : { + "file" : "lib/DateTime/Locale/zu_ZA.pm", + "version" : 0 + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=DateTime-Locale" + }, + "homepage" : "http://datetime.perl.org/", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://hg.urth.org/hg/DateTime-Locale" + } + }, + "version" : "0.45" + }, + "name" : "DateTime::Locale", + "pathname" : "D/DR/DROLSKY/DateTime-Locale-0.45.tar.gz", + "provides" : { + "DateTime::Locale" : { + "file" : "DateTime/Locale.pm", + "version" : "0.45" + }, + "DateTime::Locale::Base" : { + "file" : "DateTime/Locale/Base.pm" + }, + "DateTime::Locale::Catalog" : { + "file" : "DateTime/Locale/Catalog.pm" + }, + "DateTime::Locale::aa" : { + "file" : "DateTime/Locale/aa.pm" + }, + "DateTime::Locale::aa_DJ" : { + "file" : "DateTime/Locale/aa_DJ.pm" + }, + "DateTime::Locale::aa_ER" : { + "file" : "DateTime/Locale/aa_ER.pm" + }, + "DateTime::Locale::aa_ER_SAAHO" : { + "file" : "DateTime/Locale/aa_ER_SAAHO.pm" + }, + "DateTime::Locale::aa_ET" : { + "file" : "DateTime/Locale/aa_ET.pm" + }, + "DateTime::Locale::af" : { + "file" : "DateTime/Locale/af.pm" + }, + "DateTime::Locale::af_NA" : { + "file" : "DateTime/Locale/af_NA.pm" + }, + "DateTime::Locale::af_ZA" : { + "file" : "DateTime/Locale/af_ZA.pm" + }, + "DateTime::Locale::ak" : { + "file" : "DateTime/Locale/ak.pm" + }, + "DateTime::Locale::ak_GH" : { + "file" : "DateTime/Locale/ak_GH.pm" + }, + "DateTime::Locale::am" : { + "file" : "DateTime/Locale/am.pm" + }, + "DateTime::Locale::am_ET" : { + "file" : "DateTime/Locale/am_ET.pm" + }, + "DateTime::Locale::ar" : { + "file" : "DateTime/Locale/ar.pm" + }, + "DateTime::Locale::ar_AE" : { + "file" : "DateTime/Locale/ar_AE.pm" + }, + "DateTime::Locale::ar_BH" : { + "file" : "DateTime/Locale/ar_BH.pm" + }, + "DateTime::Locale::ar_DZ" : { + "file" : "DateTime/Locale/ar_DZ.pm" + }, + "DateTime::Locale::ar_EG" : { + "file" : "DateTime/Locale/ar_EG.pm" + }, + "DateTime::Locale::ar_IQ" : { + "file" : "DateTime/Locale/ar_IQ.pm" + }, + "DateTime::Locale::ar_JO" : { + "file" : "DateTime/Locale/ar_JO.pm" + }, + "DateTime::Locale::ar_KW" : { + "file" : "DateTime/Locale/ar_KW.pm" + }, + "DateTime::Locale::ar_LB" : { + "file" : "DateTime/Locale/ar_LB.pm" + }, + "DateTime::Locale::ar_LY" : { + "file" : "DateTime/Locale/ar_LY.pm" + }, + "DateTime::Locale::ar_MA" : { + "file" : "DateTime/Locale/ar_MA.pm" + }, + "DateTime::Locale::ar_OM" : { + "file" : "DateTime/Locale/ar_OM.pm" + }, + "DateTime::Locale::ar_QA" : { + "file" : "DateTime/Locale/ar_QA.pm" + }, + "DateTime::Locale::ar_SA" : { + "file" : "DateTime/Locale/ar_SA.pm" + }, + "DateTime::Locale::ar_SD" : { + "file" : "DateTime/Locale/ar_SD.pm" + }, + "DateTime::Locale::ar_SY" : { + "file" : "DateTime/Locale/ar_SY.pm" + }, + "DateTime::Locale::ar_TN" : { + "file" : "DateTime/Locale/ar_TN.pm" + }, + "DateTime::Locale::ar_YE" : { + "file" : "DateTime/Locale/ar_YE.pm" + }, + "DateTime::Locale::as" : { + "file" : "DateTime/Locale/as.pm" + }, + "DateTime::Locale::as_IN" : { + "file" : "DateTime/Locale/as_IN.pm" + }, + "DateTime::Locale::az" : { + "file" : "DateTime/Locale/az.pm" + }, + "DateTime::Locale::az_AZ" : { + "file" : "DateTime/Locale/az_AZ.pm" + }, + "DateTime::Locale::az_Cyrl" : { + "file" : "DateTime/Locale/az_Cyrl.pm" + }, + "DateTime::Locale::az_Cyrl_AZ" : { + "file" : "DateTime/Locale/az_Cyrl_AZ.pm" + }, + "DateTime::Locale::az_Latn" : { + "file" : "DateTime/Locale/az_Latn.pm" + }, + "DateTime::Locale::az_Latn_AZ" : { + "file" : "DateTime/Locale/az_Latn_AZ.pm" + }, + "DateTime::Locale::be" : { + "file" : "DateTime/Locale/be.pm" + }, + "DateTime::Locale::be_BY" : { + "file" : "DateTime/Locale/be_BY.pm" + }, + "DateTime::Locale::bg" : { + "file" : "DateTime/Locale/bg.pm" + }, + "DateTime::Locale::bg_BG" : { + "file" : "DateTime/Locale/bg_BG.pm" + }, + "DateTime::Locale::bn" : { + "file" : "DateTime/Locale/bn.pm" + }, + "DateTime::Locale::bn_BD" : { + "file" : "DateTime/Locale/bn_BD.pm" + }, + "DateTime::Locale::bn_IN" : { + "file" : "DateTime/Locale/bn_IN.pm" + }, + "DateTime::Locale::bo" : { + "file" : "DateTime/Locale/bo.pm" + }, + "DateTime::Locale::bo_CN" : { + "file" : "DateTime/Locale/bo_CN.pm" + }, + "DateTime::Locale::bo_IN" : { + "file" : "DateTime/Locale/bo_IN.pm" + }, + "DateTime::Locale::bs" : { + "file" : "DateTime/Locale/bs.pm" + }, + "DateTime::Locale::bs_BA" : { + "file" : "DateTime/Locale/bs_BA.pm" + }, + "DateTime::Locale::byn" : { + "file" : "DateTime/Locale/byn.pm" + }, + "DateTime::Locale::byn_ER" : { + "file" : "DateTime/Locale/byn_ER.pm" + }, + "DateTime::Locale::ca" : { + "file" : "DateTime/Locale/ca.pm" + }, + "DateTime::Locale::ca_ES" : { + "file" : "DateTime/Locale/ca_ES.pm" + }, + "DateTime::Locale::cch" : { + "file" : "DateTime/Locale/cch.pm" + }, + "DateTime::Locale::cch_NG" : { + "file" : "DateTime/Locale/cch_NG.pm" + }, + "DateTime::Locale::cop" : { + "file" : "DateTime/Locale/cop.pm" + }, + "DateTime::Locale::cs" : { + "file" : "DateTime/Locale/cs.pm" + }, + "DateTime::Locale::cs_CZ" : { + "file" : "DateTime/Locale/cs_CZ.pm" + }, + "DateTime::Locale::cy" : { + "file" : "DateTime/Locale/cy.pm" + }, + "DateTime::Locale::cy_GB" : { + "file" : "DateTime/Locale/cy_GB.pm" + }, + "DateTime::Locale::da" : { + "file" : "DateTime/Locale/da.pm" + }, + "DateTime::Locale::da_DK" : { + "file" : "DateTime/Locale/da_DK.pm" + }, + "DateTime::Locale::de" : { + "file" : "DateTime/Locale/de.pm" + }, + "DateTime::Locale::de_AT" : { + "file" : "DateTime/Locale/de_AT.pm" + }, + "DateTime::Locale::de_BE" : { + "file" : "DateTime/Locale/de_BE.pm" + }, + "DateTime::Locale::de_CH" : { + "file" : "DateTime/Locale/de_CH.pm" + }, + "DateTime::Locale::de_DE" : { + "file" : "DateTime/Locale/de_DE.pm" + }, + "DateTime::Locale::de_LI" : { + "file" : "DateTime/Locale/de_LI.pm" + }, + "DateTime::Locale::de_LU" : { + "file" : "DateTime/Locale/de_LU.pm" + }, + "DateTime::Locale::dv" : { + "file" : "DateTime/Locale/dv.pm" + }, + "DateTime::Locale::dv_MV" : { + "file" : "DateTime/Locale/dv_MV.pm" + }, + "DateTime::Locale::dz" : { + "file" : "DateTime/Locale/dz.pm" + }, + "DateTime::Locale::dz_BT" : { + "file" : "DateTime/Locale/dz_BT.pm" + }, + "DateTime::Locale::ee" : { + "file" : "DateTime/Locale/ee.pm" + }, + "DateTime::Locale::ee_GH" : { + "file" : "DateTime/Locale/ee_GH.pm" + }, + "DateTime::Locale::ee_TG" : { + "file" : "DateTime/Locale/ee_TG.pm" + }, + "DateTime::Locale::el" : { + "file" : "DateTime/Locale/el.pm" + }, + "DateTime::Locale::el_CY" : { + "file" : "DateTime/Locale/el_CY.pm" + }, + "DateTime::Locale::el_GR" : { + "file" : "DateTime/Locale/el_GR.pm" + }, + "DateTime::Locale::el_POLYTON" : { + "file" : "DateTime/Locale/el_POLYTON.pm" + }, + "DateTime::Locale::en" : { + "file" : "DateTime/Locale/en.pm" + }, + "DateTime::Locale::en_AS" : { + "file" : "DateTime/Locale/en_AS.pm" + }, + "DateTime::Locale::en_AU" : { + "file" : "DateTime/Locale/en_AU.pm" + }, + "DateTime::Locale::en_BE" : { + "file" : "DateTime/Locale/en_BE.pm" + }, + "DateTime::Locale::en_BW" : { + "file" : "DateTime/Locale/en_BW.pm" + }, + "DateTime::Locale::en_BZ" : { + "file" : "DateTime/Locale/en_BZ.pm" + }, + "DateTime::Locale::en_CA" : { + "file" : "DateTime/Locale/en_CA.pm" + }, + "DateTime::Locale::en_Dsrt" : { + "file" : "DateTime/Locale/en_Dsrt.pm" + }, + "DateTime::Locale::en_Dsrt_US" : { + "file" : "DateTime/Locale/en_Dsrt_US.pm" + }, + "DateTime::Locale::en_GB" : { + "file" : "DateTime/Locale/en_GB.pm" + }, + "DateTime::Locale::en_GU" : { + "file" : "DateTime/Locale/en_GU.pm" + }, + "DateTime::Locale::en_HK" : { + "file" : "DateTime/Locale/en_HK.pm" + }, + "DateTime::Locale::en_IE" : { + "file" : "DateTime/Locale/en_IE.pm" + }, + "DateTime::Locale::en_IN" : { + "file" : "DateTime/Locale/en_IN.pm" + }, + "DateTime::Locale::en_JM" : { + "file" : "DateTime/Locale/en_JM.pm" + }, + "DateTime::Locale::en_MH" : { + "file" : "DateTime/Locale/en_MH.pm" + }, + "DateTime::Locale::en_MP" : { + "file" : "DateTime/Locale/en_MP.pm" + }, + "DateTime::Locale::en_MT" : { + "file" : "DateTime/Locale/en_MT.pm" + }, + "DateTime::Locale::en_NA" : { + "file" : "DateTime/Locale/en_NA.pm" + }, + "DateTime::Locale::en_NZ" : { + "file" : "DateTime/Locale/en_NZ.pm" + }, + "DateTime::Locale::en_PH" : { + "file" : "DateTime/Locale/en_PH.pm" + }, + "DateTime::Locale::en_PK" : { + "file" : "DateTime/Locale/en_PK.pm" + }, + "DateTime::Locale::en_SG" : { + "file" : "DateTime/Locale/en_SG.pm" + }, + "DateTime::Locale::en_Shaw" : { + "file" : "DateTime/Locale/en_Shaw.pm" + }, + "DateTime::Locale::en_TT" : { + "file" : "DateTime/Locale/en_TT.pm" + }, + "DateTime::Locale::en_UM" : { + "file" : "DateTime/Locale/en_UM.pm" + }, + "DateTime::Locale::en_US" : { + "file" : "DateTime/Locale/en_US.pm" + }, + "DateTime::Locale::en_US_POSIX" : { + "file" : "DateTime/Locale/en_US_POSIX.pm" + }, + "DateTime::Locale::en_VI" : { + "file" : "DateTime/Locale/en_VI.pm" + }, + "DateTime::Locale::en_ZA" : { + "file" : "DateTime/Locale/en_ZA.pm" + }, + "DateTime::Locale::en_ZW" : { + "file" : "DateTime/Locale/en_ZW.pm" + }, + "DateTime::Locale::eo" : { + "file" : "DateTime/Locale/eo.pm" + }, + "DateTime::Locale::es" : { + "file" : "DateTime/Locale/es.pm" + }, + "DateTime::Locale::es_AR" : { + "file" : "DateTime/Locale/es_AR.pm" + }, + "DateTime::Locale::es_BO" : { + "file" : "DateTime/Locale/es_BO.pm" + }, + "DateTime::Locale::es_CL" : { + "file" : "DateTime/Locale/es_CL.pm" + }, + "DateTime::Locale::es_CO" : { + "file" : "DateTime/Locale/es_CO.pm" + }, + "DateTime::Locale::es_CR" : { + "file" : "DateTime/Locale/es_CR.pm" + }, + "DateTime::Locale::es_DO" : { + "file" : "DateTime/Locale/es_DO.pm" + }, + "DateTime::Locale::es_EC" : { + "file" : "DateTime/Locale/es_EC.pm" + }, + "DateTime::Locale::es_ES" : { + "file" : "DateTime/Locale/es_ES.pm" + }, + "DateTime::Locale::es_GT" : { + "file" : "DateTime/Locale/es_GT.pm" + }, + "DateTime::Locale::es_HN" : { + "file" : "DateTime/Locale/es_HN.pm" + }, + "DateTime::Locale::es_MX" : { + "file" : "DateTime/Locale/es_MX.pm" + }, + "DateTime::Locale::es_NI" : { + "file" : "DateTime/Locale/es_NI.pm" + }, + "DateTime::Locale::es_PA" : { + "file" : "DateTime/Locale/es_PA.pm" + }, + "DateTime::Locale::es_PE" : { + "file" : "DateTime/Locale/es_PE.pm" + }, + "DateTime::Locale::es_PR" : { + "file" : "DateTime/Locale/es_PR.pm" + }, + "DateTime::Locale::es_PY" : { + "file" : "DateTime/Locale/es_PY.pm" + }, + "DateTime::Locale::es_SV" : { + "file" : "DateTime/Locale/es_SV.pm" + }, + "DateTime::Locale::es_US" : { + "file" : "DateTime/Locale/es_US.pm" + }, + "DateTime::Locale::es_UY" : { + "file" : "DateTime/Locale/es_UY.pm" + }, + "DateTime::Locale::es_VE" : { + "file" : "DateTime/Locale/es_VE.pm" + }, + "DateTime::Locale::et" : { + "file" : "DateTime/Locale/et.pm" + }, + "DateTime::Locale::et_EE" : { + "file" : "DateTime/Locale/et_EE.pm" + }, + "DateTime::Locale::eu" : { + "file" : "DateTime/Locale/eu.pm" + }, + "DateTime::Locale::eu_ES" : { + "file" : "DateTime/Locale/eu_ES.pm" + }, + "DateTime::Locale::fa" : { + "file" : "DateTime/Locale/fa.pm" + }, + "DateTime::Locale::fa_AF" : { + "file" : "DateTime/Locale/fa_AF.pm" + }, + "DateTime::Locale::fa_IR" : { + "file" : "DateTime/Locale/fa_IR.pm" + }, + "DateTime::Locale::fi" : { + "file" : "DateTime/Locale/fi.pm" + }, + "DateTime::Locale::fi_FI" : { + "file" : "DateTime/Locale/fi_FI.pm" + }, + "DateTime::Locale::fil" : { + "file" : "DateTime/Locale/fil.pm" + }, + "DateTime::Locale::fil_PH" : { + "file" : "DateTime/Locale/fil_PH.pm" + }, + "DateTime::Locale::fo" : { + "file" : "DateTime/Locale/fo.pm" + }, + "DateTime::Locale::fo_FO" : { + "file" : "DateTime/Locale/fo_FO.pm" + }, + "DateTime::Locale::fr" : { + "file" : "DateTime/Locale/fr.pm" + }, + "DateTime::Locale::fr_BE" : { + "file" : "DateTime/Locale/fr_BE.pm" + }, + "DateTime::Locale::fr_CA" : { + "file" : "DateTime/Locale/fr_CA.pm" + }, + "DateTime::Locale::fr_CH" : { + "file" : "DateTime/Locale/fr_CH.pm" + }, + "DateTime::Locale::fr_FR" : { + "file" : "DateTime/Locale/fr_FR.pm" + }, + "DateTime::Locale::fr_LU" : { + "file" : "DateTime/Locale/fr_LU.pm" + }, + "DateTime::Locale::fr_MC" : { + "file" : "DateTime/Locale/fr_MC.pm" + }, + "DateTime::Locale::fr_SN" : { + "file" : "DateTime/Locale/fr_SN.pm" + }, + "DateTime::Locale::fur" : { + "file" : "DateTime/Locale/fur.pm" + }, + "DateTime::Locale::fur_IT" : { + "file" : "DateTime/Locale/fur_IT.pm" + }, + "DateTime::Locale::ga" : { + "file" : "DateTime/Locale/ga.pm" + }, + "DateTime::Locale::ga_IE" : { + "file" : "DateTime/Locale/ga_IE.pm" + }, + "DateTime::Locale::gaa" : { + "file" : "DateTime/Locale/gaa.pm" + }, + "DateTime::Locale::gaa_GH" : { + "file" : "DateTime/Locale/gaa_GH.pm" + }, + "DateTime::Locale::gez" : { + "file" : "DateTime/Locale/gez.pm" + }, + "DateTime::Locale::gez_ER" : { + "file" : "DateTime/Locale/gez_ER.pm" + }, + "DateTime::Locale::gez_ET" : { + "file" : "DateTime/Locale/gez_ET.pm" + }, + "DateTime::Locale::gl" : { + "file" : "DateTime/Locale/gl.pm" + }, + "DateTime::Locale::gl_ES" : { + "file" : "DateTime/Locale/gl_ES.pm" + }, + "DateTime::Locale::gsw" : { + "file" : "DateTime/Locale/gsw.pm" + }, + "DateTime::Locale::gsw_CH" : { + "file" : "DateTime/Locale/gsw_CH.pm" + }, + "DateTime::Locale::gu" : { + "file" : "DateTime/Locale/gu.pm" + }, + "DateTime::Locale::gu_IN" : { + "file" : "DateTime/Locale/gu_IN.pm" + }, + "DateTime::Locale::gv" : { + "file" : "DateTime/Locale/gv.pm" + }, + "DateTime::Locale::gv_GB" : { + "file" : "DateTime/Locale/gv_GB.pm" + }, + "DateTime::Locale::ha" : { + "file" : "DateTime/Locale/ha.pm" + }, + "DateTime::Locale::ha_Arab" : { + "file" : "DateTime/Locale/ha_Arab.pm" + }, + "DateTime::Locale::ha_Arab_NG" : { + "file" : "DateTime/Locale/ha_Arab_NG.pm" + }, + "DateTime::Locale::ha_Arab_SD" : { + "file" : "DateTime/Locale/ha_Arab_SD.pm" + }, + "DateTime::Locale::ha_GH" : { + "file" : "DateTime/Locale/ha_GH.pm" + }, + "DateTime::Locale::ha_Latn" : { + "file" : "DateTime/Locale/ha_Latn.pm" + }, + "DateTime::Locale::ha_Latn_GH" : { + "file" : "DateTime/Locale/ha_Latn_GH.pm" + }, + "DateTime::Locale::ha_Latn_NE" : { + "file" : "DateTime/Locale/ha_Latn_NE.pm" + }, + "DateTime::Locale::ha_Latn_NG" : { + "file" : "DateTime/Locale/ha_Latn_NG.pm" + }, + "DateTime::Locale::ha_NE" : { + "file" : "DateTime/Locale/ha_NE.pm" + }, + "DateTime::Locale::ha_NG" : { + "file" : "DateTime/Locale/ha_NG.pm" + }, + "DateTime::Locale::ha_SD" : { + "file" : "DateTime/Locale/ha_SD.pm" + }, + "DateTime::Locale::haw" : { + "file" : "DateTime/Locale/haw.pm" + }, + "DateTime::Locale::haw_US" : { + "file" : "DateTime/Locale/haw_US.pm" + }, + "DateTime::Locale::he" : { + "file" : "DateTime/Locale/he.pm" + }, + "DateTime::Locale::he_IL" : { + "file" : "DateTime/Locale/he_IL.pm" + }, + "DateTime::Locale::hi" : { + "file" : "DateTime/Locale/hi.pm" + }, + "DateTime::Locale::hi_IN" : { + "file" : "DateTime/Locale/hi_IN.pm" + }, + "DateTime::Locale::hr" : { + "file" : "DateTime/Locale/hr.pm" + }, + "DateTime::Locale::hr_HR" : { + "file" : "DateTime/Locale/hr_HR.pm" + }, + "DateTime::Locale::hu" : { + "file" : "DateTime/Locale/hu.pm" + }, + "DateTime::Locale::hu_HU" : { + "file" : "DateTime/Locale/hu_HU.pm" + }, + "DateTime::Locale::hy" : { + "file" : "DateTime/Locale/hy.pm" + }, + "DateTime::Locale::hy_AM" : { + "file" : "DateTime/Locale/hy_AM.pm" + }, + "DateTime::Locale::hy_AM_REVISED" : { + "file" : "DateTime/Locale/hy_AM_REVISED.pm" + }, + "DateTime::Locale::ia" : { + "file" : "DateTime/Locale/ia.pm" + }, + "DateTime::Locale::id" : { + "file" : "DateTime/Locale/id.pm" + }, + "DateTime::Locale::id_ID" : { + "file" : "DateTime/Locale/id_ID.pm" + }, + "DateTime::Locale::ig" : { + "file" : "DateTime/Locale/ig.pm" + }, + "DateTime::Locale::ig_NG" : { + "file" : "DateTime/Locale/ig_NG.pm" + }, + "DateTime::Locale::ii" : { + "file" : "DateTime/Locale/ii.pm" + }, + "DateTime::Locale::ii_CN" : { + "file" : "DateTime/Locale/ii_CN.pm" + }, + "DateTime::Locale::is" : { + "file" : "DateTime/Locale/is.pm" + }, + "DateTime::Locale::is_IS" : { + "file" : "DateTime/Locale/is_IS.pm" + }, + "DateTime::Locale::it" : { + "file" : "DateTime/Locale/it.pm" + }, + "DateTime::Locale::it_CH" : { + "file" : "DateTime/Locale/it_CH.pm" + }, + "DateTime::Locale::it_IT" : { + "file" : "DateTime/Locale/it_IT.pm" + }, + "DateTime::Locale::iu" : { + "file" : "DateTime/Locale/iu.pm" + }, + "DateTime::Locale::ja" : { + "file" : "DateTime/Locale/ja.pm" + }, + "DateTime::Locale::ja_JP" : { + "file" : "DateTime/Locale/ja_JP.pm" + }, + "DateTime::Locale::ka" : { + "file" : "DateTime/Locale/ka.pm" + }, + "DateTime::Locale::ka_GE" : { + "file" : "DateTime/Locale/ka_GE.pm" + }, + "DateTime::Locale::kaj" : { + "file" : "DateTime/Locale/kaj.pm" + }, + "DateTime::Locale::kaj_NG" : { + "file" : "DateTime/Locale/kaj_NG.pm" + }, + "DateTime::Locale::kam" : { + "file" : "DateTime/Locale/kam.pm" + }, + "DateTime::Locale::kam_KE" : { + "file" : "DateTime/Locale/kam_KE.pm" + }, + "DateTime::Locale::kcg" : { + "file" : "DateTime/Locale/kcg.pm" + }, + "DateTime::Locale::kcg_NG" : { + "file" : "DateTime/Locale/kcg_NG.pm" + }, + "DateTime::Locale::kfo" : { + "file" : "DateTime/Locale/kfo.pm" + }, + "DateTime::Locale::kfo_CI" : { + "file" : "DateTime/Locale/kfo_CI.pm" + }, + "DateTime::Locale::kk" : { + "file" : "DateTime/Locale/kk.pm" + }, + "DateTime::Locale::kk_Cyrl" : { + "file" : "DateTime/Locale/kk_Cyrl.pm" + }, + "DateTime::Locale::kk_Cyrl_KZ" : { + "file" : "DateTime/Locale/kk_Cyrl_KZ.pm" + }, + "DateTime::Locale::kk_KZ" : { + "file" : "DateTime/Locale/kk_KZ.pm" + }, + "DateTime::Locale::kl" : { + "file" : "DateTime/Locale/kl.pm" + }, + "DateTime::Locale::kl_GL" : { + "file" : "DateTime/Locale/kl_GL.pm" + }, + "DateTime::Locale::km" : { + "file" : "DateTime/Locale/km.pm" + }, + "DateTime::Locale::km_KH" : { + "file" : "DateTime/Locale/km_KH.pm" + }, + "DateTime::Locale::kn" : { + "file" : "DateTime/Locale/kn.pm" + }, + "DateTime::Locale::kn_IN" : { + "file" : "DateTime/Locale/kn_IN.pm" + }, + "DateTime::Locale::ko" : { + "file" : "DateTime/Locale/ko.pm" + }, + "DateTime::Locale::ko_KR" : { + "file" : "DateTime/Locale/ko_KR.pm" + }, + "DateTime::Locale::kok" : { + "file" : "DateTime/Locale/kok.pm" + }, + "DateTime::Locale::kok_IN" : { + "file" : "DateTime/Locale/kok_IN.pm" + }, + "DateTime::Locale::kpe" : { + "file" : "DateTime/Locale/kpe.pm" + }, + "DateTime::Locale::kpe_GN" : { + "file" : "DateTime/Locale/kpe_GN.pm" + }, + "DateTime::Locale::kpe_LR" : { + "file" : "DateTime/Locale/kpe_LR.pm" + }, + "DateTime::Locale::ku" : { + "file" : "DateTime/Locale/ku.pm" + }, + "DateTime::Locale::ku_Arab" : { + "file" : "DateTime/Locale/ku_Arab.pm" + }, + "DateTime::Locale::ku_Arab_IQ" : { + "file" : "DateTime/Locale/ku_Arab_IQ.pm" + }, + "DateTime::Locale::ku_Arab_IR" : { + "file" : "DateTime/Locale/ku_Arab_IR.pm" + }, + "DateTime::Locale::ku_Arab_SY" : { + "file" : "DateTime/Locale/ku_Arab_SY.pm" + }, + "DateTime::Locale::ku_IQ" : { + "file" : "DateTime/Locale/ku_IQ.pm" + }, + "DateTime::Locale::ku_IR" : { + "file" : "DateTime/Locale/ku_IR.pm" + }, + "DateTime::Locale::ku_Latn" : { + "file" : "DateTime/Locale/ku_Latn.pm" + }, + "DateTime::Locale::ku_Latn_TR" : { + "file" : "DateTime/Locale/ku_Latn_TR.pm" + }, + "DateTime::Locale::ku_SY" : { + "file" : "DateTime/Locale/ku_SY.pm" + }, + "DateTime::Locale::ku_TR" : { + "file" : "DateTime/Locale/ku_TR.pm" + }, + "DateTime::Locale::kw" : { + "file" : "DateTime/Locale/kw.pm" + }, + "DateTime::Locale::kw_GB" : { + "file" : "DateTime/Locale/kw_GB.pm" + }, + "DateTime::Locale::ky" : { + "file" : "DateTime/Locale/ky.pm" + }, + "DateTime::Locale::ky_KG" : { + "file" : "DateTime/Locale/ky_KG.pm" + }, + "DateTime::Locale::ln" : { + "file" : "DateTime/Locale/ln.pm" + }, + "DateTime::Locale::ln_CD" : { + "file" : "DateTime/Locale/ln_CD.pm" + }, + "DateTime::Locale::ln_CG" : { + "file" : "DateTime/Locale/ln_CG.pm" + }, + "DateTime::Locale::lo" : { + "file" : "DateTime/Locale/lo.pm" + }, + "DateTime::Locale::lo_LA" : { + "file" : "DateTime/Locale/lo_LA.pm" + }, + "DateTime::Locale::lt" : { + "file" : "DateTime/Locale/lt.pm" + }, + "DateTime::Locale::lt_LT" : { + "file" : "DateTime/Locale/lt_LT.pm" + }, + "DateTime::Locale::lv" : { + "file" : "DateTime/Locale/lv.pm" + }, + "DateTime::Locale::lv_LV" : { + "file" : "DateTime/Locale/lv_LV.pm" + }, + "DateTime::Locale::mk" : { + "file" : "DateTime/Locale/mk.pm" + }, + "DateTime::Locale::mk_MK" : { + "file" : "DateTime/Locale/mk_MK.pm" + }, + "DateTime::Locale::ml" : { + "file" : "DateTime/Locale/ml.pm" + }, + "DateTime::Locale::ml_IN" : { + "file" : "DateTime/Locale/ml_IN.pm" + }, + "DateTime::Locale::mn" : { + "file" : "DateTime/Locale/mn.pm" + }, + "DateTime::Locale::mn_CN" : { + "file" : "DateTime/Locale/mn_CN.pm" + }, + "DateTime::Locale::mn_Cyrl" : { + "file" : "DateTime/Locale/mn_Cyrl.pm" + }, + "DateTime::Locale::mn_Cyrl_MN" : { + "file" : "DateTime/Locale/mn_Cyrl_MN.pm" + }, + "DateTime::Locale::mn_MN" : { + "file" : "DateTime/Locale/mn_MN.pm" + }, + "DateTime::Locale::mn_Mong" : { + "file" : "DateTime/Locale/mn_Mong.pm" + }, + "DateTime::Locale::mn_Mong_CN" : { + "file" : "DateTime/Locale/mn_Mong_CN.pm" + }, + "DateTime::Locale::mo" : { + "file" : "DateTime/Locale/mo.pm" + }, + "DateTime::Locale::mr" : { + "file" : "DateTime/Locale/mr.pm" + }, + "DateTime::Locale::mr_IN" : { + "file" : "DateTime/Locale/mr_IN.pm" + }, + "DateTime::Locale::ms" : { + "file" : "DateTime/Locale/ms.pm" + }, + "DateTime::Locale::ms_BN" : { + "file" : "DateTime/Locale/ms_BN.pm" + }, + "DateTime::Locale::ms_MY" : { + "file" : "DateTime/Locale/ms_MY.pm" + }, + "DateTime::Locale::mt" : { + "file" : "DateTime/Locale/mt.pm" + }, + "DateTime::Locale::mt_MT" : { + "file" : "DateTime/Locale/mt_MT.pm" + }, + "DateTime::Locale::my" : { + "file" : "DateTime/Locale/my.pm" + }, + "DateTime::Locale::my_MM" : { + "file" : "DateTime/Locale/my_MM.pm" + }, + "DateTime::Locale::nb" : { + "file" : "DateTime/Locale/nb.pm" + }, + "DateTime::Locale::nb_NO" : { + "file" : "DateTime/Locale/nb_NO.pm" + }, + "DateTime::Locale::nds" : { + "file" : "DateTime/Locale/nds.pm" + }, + "DateTime::Locale::nds_DE" : { + "file" : "DateTime/Locale/nds_DE.pm" + }, + "DateTime::Locale::ne" : { + "file" : "DateTime/Locale/ne.pm" + }, + "DateTime::Locale::ne_IN" : { + "file" : "DateTime/Locale/ne_IN.pm" + }, + "DateTime::Locale::ne_NP" : { + "file" : "DateTime/Locale/ne_NP.pm" + }, + "DateTime::Locale::nl" : { + "file" : "DateTime/Locale/nl.pm" + }, + "DateTime::Locale::nl_BE" : { + "file" : "DateTime/Locale/nl_BE.pm" + }, + "DateTime::Locale::nl_NL" : { + "file" : "DateTime/Locale/nl_NL.pm" + }, + "DateTime::Locale::nn" : { + "file" : "DateTime/Locale/nn.pm" + }, + "DateTime::Locale::nn_NO" : { + "file" : "DateTime/Locale/nn_NO.pm" + }, + "DateTime::Locale::no" : { + "file" : "DateTime/Locale/no.pm" + }, + "DateTime::Locale::nr" : { + "file" : "DateTime/Locale/nr.pm" + }, + "DateTime::Locale::nr_ZA" : { + "file" : "DateTime/Locale/nr_ZA.pm" + }, + "DateTime::Locale::nso" : { + "file" : "DateTime/Locale/nso.pm" + }, + "DateTime::Locale::nso_ZA" : { + "file" : "DateTime/Locale/nso_ZA.pm" + }, + "DateTime::Locale::ny" : { + "file" : "DateTime/Locale/ny.pm" + }, + "DateTime::Locale::ny_MW" : { + "file" : "DateTime/Locale/ny_MW.pm" + }, + "DateTime::Locale::oc" : { + "file" : "DateTime/Locale/oc.pm" + }, + "DateTime::Locale::oc_FR" : { + "file" : "DateTime/Locale/oc_FR.pm" + }, + "DateTime::Locale::om" : { + "file" : "DateTime/Locale/om.pm" + }, + "DateTime::Locale::om_ET" : { + "file" : "DateTime/Locale/om_ET.pm" + }, + "DateTime::Locale::om_KE" : { + "file" : "DateTime/Locale/om_KE.pm" + }, + "DateTime::Locale::or" : { + "file" : "DateTime/Locale/or.pm" + }, + "DateTime::Locale::or_IN" : { + "file" : "DateTime/Locale/or_IN.pm" + }, + "DateTime::Locale::pa" : { + "file" : "DateTime/Locale/pa.pm" + }, + "DateTime::Locale::pa_Arab" : { + "file" : "DateTime/Locale/pa_Arab.pm" + }, + "DateTime::Locale::pa_Arab_PK" : { + "file" : "DateTime/Locale/pa_Arab_PK.pm" + }, + "DateTime::Locale::pa_Guru" : { + "file" : "DateTime/Locale/pa_Guru.pm" + }, + "DateTime::Locale::pa_Guru_IN" : { + "file" : "DateTime/Locale/pa_Guru_IN.pm" + }, + "DateTime::Locale::pa_IN" : { + "file" : "DateTime/Locale/pa_IN.pm" + }, + "DateTime::Locale::pa_PK" : { + "file" : "DateTime/Locale/pa_PK.pm" + }, + "DateTime::Locale::pl" : { + "file" : "DateTime/Locale/pl.pm" + }, + "DateTime::Locale::pl_PL" : { + "file" : "DateTime/Locale/pl_PL.pm" + }, + "DateTime::Locale::ps" : { + "file" : "DateTime/Locale/ps.pm" + }, + "DateTime::Locale::ps_AF" : { + "file" : "DateTime/Locale/ps_AF.pm" + }, + "DateTime::Locale::pt" : { + "file" : "DateTime/Locale/pt.pm" + }, + "DateTime::Locale::pt_BR" : { + "file" : "DateTime/Locale/pt_BR.pm" + }, + "DateTime::Locale::pt_PT" : { + "file" : "DateTime/Locale/pt_PT.pm" + }, + "DateTime::Locale::ro" : { + "file" : "DateTime/Locale/ro.pm" + }, + "DateTime::Locale::ro_MD" : { + "file" : "DateTime/Locale/ro_MD.pm" + }, + "DateTime::Locale::ro_RO" : { + "file" : "DateTime/Locale/ro_RO.pm" + }, + "DateTime::Locale::root" : { + "file" : "DateTime/Locale/root.pm" + }, + "DateTime::Locale::ru" : { + "file" : "DateTime/Locale/ru.pm" + }, + "DateTime::Locale::ru_RU" : { + "file" : "DateTime/Locale/ru_RU.pm" + }, + "DateTime::Locale::ru_UA" : { + "file" : "DateTime/Locale/ru_UA.pm" + }, + "DateTime::Locale::rw" : { + "file" : "DateTime/Locale/rw.pm" + }, + "DateTime::Locale::rw_RW" : { + "file" : "DateTime/Locale/rw_RW.pm" + }, + "DateTime::Locale::sa" : { + "file" : "DateTime/Locale/sa.pm" + }, + "DateTime::Locale::sa_IN" : { + "file" : "DateTime/Locale/sa_IN.pm" + }, + "DateTime::Locale::se" : { + "file" : "DateTime/Locale/se.pm" + }, + "DateTime::Locale::se_FI" : { + "file" : "DateTime/Locale/se_FI.pm" + }, + "DateTime::Locale::se_NO" : { + "file" : "DateTime/Locale/se_NO.pm" + }, + "DateTime::Locale::sh" : { + "file" : "DateTime/Locale/sh.pm" + }, + "DateTime::Locale::sh_BA" : { + "file" : "DateTime/Locale/sh_BA.pm" + }, + "DateTime::Locale::sh_CS" : { + "file" : "DateTime/Locale/sh_CS.pm" + }, + "DateTime::Locale::sh_YU" : { + "file" : "DateTime/Locale/sh_YU.pm" + }, + "DateTime::Locale::si" : { + "file" : "DateTime/Locale/si.pm" + }, + "DateTime::Locale::si_LK" : { + "file" : "DateTime/Locale/si_LK.pm" + }, + "DateTime::Locale::sid" : { + "file" : "DateTime/Locale/sid.pm" + }, + "DateTime::Locale::sid_ET" : { + "file" : "DateTime/Locale/sid_ET.pm" + }, + "DateTime::Locale::sk" : { + "file" : "DateTime/Locale/sk.pm" + }, + "DateTime::Locale::sk_SK" : { + "file" : "DateTime/Locale/sk_SK.pm" + }, + "DateTime::Locale::sl" : { + "file" : "DateTime/Locale/sl.pm" + }, + "DateTime::Locale::sl_SI" : { + "file" : "DateTime/Locale/sl_SI.pm" + }, + "DateTime::Locale::so" : { + "file" : "DateTime/Locale/so.pm" + }, + "DateTime::Locale::so_DJ" : { + "file" : "DateTime/Locale/so_DJ.pm" + }, + "DateTime::Locale::so_ET" : { + "file" : "DateTime/Locale/so_ET.pm" + }, + "DateTime::Locale::so_KE" : { + "file" : "DateTime/Locale/so_KE.pm" + }, + "DateTime::Locale::so_SO" : { + "file" : "DateTime/Locale/so_SO.pm" + }, + "DateTime::Locale::sq" : { + "file" : "DateTime/Locale/sq.pm" + }, + "DateTime::Locale::sq_AL" : { + "file" : "DateTime/Locale/sq_AL.pm" + }, + "DateTime::Locale::sr" : { + "file" : "DateTime/Locale/sr.pm" + }, + "DateTime::Locale::sr_BA" : { + "file" : "DateTime/Locale/sr_BA.pm" + }, + "DateTime::Locale::sr_CS" : { + "file" : "DateTime/Locale/sr_CS.pm" + }, + "DateTime::Locale::sr_Cyrl" : { + "file" : "DateTime/Locale/sr_Cyrl.pm" + }, + "DateTime::Locale::sr_Cyrl_BA" : { + "file" : "DateTime/Locale/sr_Cyrl_BA.pm" + }, + "DateTime::Locale::sr_Cyrl_CS" : { + "file" : "DateTime/Locale/sr_Cyrl_CS.pm" + }, + "DateTime::Locale::sr_Cyrl_ME" : { + "file" : "DateTime/Locale/sr_Cyrl_ME.pm" + }, + "DateTime::Locale::sr_Cyrl_RS" : { + "file" : "DateTime/Locale/sr_Cyrl_RS.pm" + }, + "DateTime::Locale::sr_Cyrl_YU" : { + "file" : "DateTime/Locale/sr_Cyrl_YU.pm" + }, + "DateTime::Locale::sr_Latn" : { + "file" : "DateTime/Locale/sr_Latn.pm" + }, + "DateTime::Locale::sr_Latn_BA" : { + "file" : "DateTime/Locale/sr_Latn_BA.pm" + }, + "DateTime::Locale::sr_Latn_CS" : { + "file" : "DateTime/Locale/sr_Latn_CS.pm" + }, + "DateTime::Locale::sr_Latn_ME" : { + "file" : "DateTime/Locale/sr_Latn_ME.pm" + }, + "DateTime::Locale::sr_Latn_RS" : { + "file" : "DateTime/Locale/sr_Latn_RS.pm" + }, + "DateTime::Locale::sr_Latn_YU" : { + "file" : "DateTime/Locale/sr_Latn_YU.pm" + }, + "DateTime::Locale::sr_ME" : { + "file" : "DateTime/Locale/sr_ME.pm" + }, + "DateTime::Locale::sr_RS" : { + "file" : "DateTime/Locale/sr_RS.pm" + }, + "DateTime::Locale::sr_YU" : { + "file" : "DateTime/Locale/sr_YU.pm" + }, + "DateTime::Locale::ss" : { + "file" : "DateTime/Locale/ss.pm" + }, + "DateTime::Locale::ss_SZ" : { + "file" : "DateTime/Locale/ss_SZ.pm" + }, + "DateTime::Locale::ss_ZA" : { + "file" : "DateTime/Locale/ss_ZA.pm" + }, + "DateTime::Locale::st" : { + "file" : "DateTime/Locale/st.pm" + }, + "DateTime::Locale::st_LS" : { + "file" : "DateTime/Locale/st_LS.pm" + }, + "DateTime::Locale::st_ZA" : { + "file" : "DateTime/Locale/st_ZA.pm" + }, + "DateTime::Locale::sv" : { + "file" : "DateTime/Locale/sv.pm" + }, + "DateTime::Locale::sv_FI" : { + "file" : "DateTime/Locale/sv_FI.pm" + }, + "DateTime::Locale::sv_SE" : { + "file" : "DateTime/Locale/sv_SE.pm" + }, + "DateTime::Locale::sw" : { + "file" : "DateTime/Locale/sw.pm" + }, + "DateTime::Locale::sw_KE" : { + "file" : "DateTime/Locale/sw_KE.pm" + }, + "DateTime::Locale::sw_TZ" : { + "file" : "DateTime/Locale/sw_TZ.pm" + }, + "DateTime::Locale::syr" : { + "file" : "DateTime/Locale/syr.pm" + }, + "DateTime::Locale::syr_SY" : { + "file" : "DateTime/Locale/syr_SY.pm" + }, + "DateTime::Locale::ta" : { + "file" : "DateTime/Locale/ta.pm" + }, + "DateTime::Locale::ta_IN" : { + "file" : "DateTime/Locale/ta_IN.pm" + }, + "DateTime::Locale::te" : { + "file" : "DateTime/Locale/te.pm" + }, + "DateTime::Locale::te_IN" : { + "file" : "DateTime/Locale/te_IN.pm" + }, + "DateTime::Locale::tg" : { + "file" : "DateTime/Locale/tg.pm" + }, + "DateTime::Locale::tg_Cyrl" : { + "file" : "DateTime/Locale/tg_Cyrl.pm" + }, + "DateTime::Locale::tg_Cyrl_TJ" : { + "file" : "DateTime/Locale/tg_Cyrl_TJ.pm" + }, + "DateTime::Locale::tg_TJ" : { + "file" : "DateTime/Locale/tg_TJ.pm" + }, + "DateTime::Locale::th" : { + "file" : "DateTime/Locale/th.pm" + }, + "DateTime::Locale::th_TH" : { + "file" : "DateTime/Locale/th_TH.pm" + }, + "DateTime::Locale::ti" : { + "file" : "DateTime/Locale/ti.pm" + }, + "DateTime::Locale::ti_ER" : { + "file" : "DateTime/Locale/ti_ER.pm" + }, + "DateTime::Locale::ti_ET" : { + "file" : "DateTime/Locale/ti_ET.pm" + }, + "DateTime::Locale::tig" : { + "file" : "DateTime/Locale/tig.pm" + }, + "DateTime::Locale::tig_ER" : { + "file" : "DateTime/Locale/tig_ER.pm" + }, + "DateTime::Locale::tl" : { + "file" : "DateTime/Locale/tl.pm" + }, + "DateTime::Locale::tn" : { + "file" : "DateTime/Locale/tn.pm" + }, + "DateTime::Locale::tn_ZA" : { + "file" : "DateTime/Locale/tn_ZA.pm" + }, + "DateTime::Locale::to" : { + "file" : "DateTime/Locale/to.pm" + }, + "DateTime::Locale::to_TO" : { + "file" : "DateTime/Locale/to_TO.pm" + }, + "DateTime::Locale::tr" : { + "file" : "DateTime/Locale/tr.pm" + }, + "DateTime::Locale::tr_TR" : { + "file" : "DateTime/Locale/tr_TR.pm" + }, + "DateTime::Locale::trv" : { + "file" : "DateTime/Locale/trv.pm" + }, + "DateTime::Locale::trv_TW" : { + "file" : "DateTime/Locale/trv_TW.pm" + }, + "DateTime::Locale::ts" : { + "file" : "DateTime/Locale/ts.pm" + }, + "DateTime::Locale::ts_ZA" : { + "file" : "DateTime/Locale/ts_ZA.pm" + }, + "DateTime::Locale::tt" : { + "file" : "DateTime/Locale/tt.pm" + }, + "DateTime::Locale::tt_RU" : { + "file" : "DateTime/Locale/tt_RU.pm" + }, + "DateTime::Locale::ug" : { + "file" : "DateTime/Locale/ug.pm" + }, + "DateTime::Locale::ug_Arab" : { + "file" : "DateTime/Locale/ug_Arab.pm" + }, + "DateTime::Locale::ug_Arab_CN" : { + "file" : "DateTime/Locale/ug_Arab_CN.pm" + }, + "DateTime::Locale::ug_CN" : { + "file" : "DateTime/Locale/ug_CN.pm" + }, + "DateTime::Locale::uk" : { + "file" : "DateTime/Locale/uk.pm" + }, + "DateTime::Locale::uk_UA" : { + "file" : "DateTime/Locale/uk_UA.pm" + }, + "DateTime::Locale::ur" : { + "file" : "DateTime/Locale/ur.pm" + }, + "DateTime::Locale::ur_IN" : { + "file" : "DateTime/Locale/ur_IN.pm" + }, + "DateTime::Locale::ur_PK" : { + "file" : "DateTime/Locale/ur_PK.pm" + }, + "DateTime::Locale::uz" : { + "file" : "DateTime/Locale/uz.pm" + }, + "DateTime::Locale::uz_AF" : { + "file" : "DateTime/Locale/uz_AF.pm" + }, + "DateTime::Locale::uz_Arab" : { + "file" : "DateTime/Locale/uz_Arab.pm" + }, + "DateTime::Locale::uz_Arab_AF" : { + "file" : "DateTime/Locale/uz_Arab_AF.pm" + }, + "DateTime::Locale::uz_Cyrl" : { + "file" : "DateTime/Locale/uz_Cyrl.pm" + }, + "DateTime::Locale::uz_Cyrl_UZ" : { + "file" : "DateTime/Locale/uz_Cyrl_UZ.pm" + }, + "DateTime::Locale::uz_Latn" : { + "file" : "DateTime/Locale/uz_Latn.pm" + }, + "DateTime::Locale::uz_Latn_UZ" : { + "file" : "DateTime/Locale/uz_Latn_UZ.pm" + }, + "DateTime::Locale::uz_UZ" : { + "file" : "DateTime/Locale/uz_UZ.pm" + }, + "DateTime::Locale::ve" : { + "file" : "DateTime/Locale/ve.pm" + }, + "DateTime::Locale::ve_ZA" : { + "file" : "DateTime/Locale/ve_ZA.pm" + }, + "DateTime::Locale::vi" : { + "file" : "DateTime/Locale/vi.pm" + }, + "DateTime::Locale::vi_VN" : { + "file" : "DateTime/Locale/vi_VN.pm" + }, + "DateTime::Locale::wal" : { + "file" : "DateTime/Locale/wal.pm" + }, + "DateTime::Locale::wal_ET" : { + "file" : "DateTime/Locale/wal_ET.pm" + }, + "DateTime::Locale::wo" : { + "file" : "DateTime/Locale/wo.pm" + }, + "DateTime::Locale::wo_Latn" : { + "file" : "DateTime/Locale/wo_Latn.pm" + }, + "DateTime::Locale::wo_Latn_SN" : { + "file" : "DateTime/Locale/wo_Latn_SN.pm" + }, + "DateTime::Locale::wo_SN" : { + "file" : "DateTime/Locale/wo_SN.pm" + }, + "DateTime::Locale::xh" : { + "file" : "DateTime/Locale/xh.pm" + }, + "DateTime::Locale::xh_ZA" : { + "file" : "DateTime/Locale/xh_ZA.pm" + }, + "DateTime::Locale::yo" : { + "file" : "DateTime/Locale/yo.pm" + }, + "DateTime::Locale::yo_NG" : { + "file" : "DateTime/Locale/yo_NG.pm" + }, + "DateTime::Locale::zh" : { + "file" : "DateTime/Locale/zh.pm" + }, + "DateTime::Locale::zh_CN" : { + "file" : "DateTime/Locale/zh_CN.pm" + }, + "DateTime::Locale::zh_HK" : { + "file" : "DateTime/Locale/zh_HK.pm" + }, + "DateTime::Locale::zh_Hans" : { + "file" : "DateTime/Locale/zh_Hans.pm" + }, + "DateTime::Locale::zh_Hans_CN" : { + "file" : "DateTime/Locale/zh_Hans_CN.pm" + }, + "DateTime::Locale::zh_Hans_HK" : { + "file" : "DateTime/Locale/zh_Hans_HK.pm" + }, + "DateTime::Locale::zh_Hans_MO" : { + "file" : "DateTime/Locale/zh_Hans_MO.pm" + }, + "DateTime::Locale::zh_Hans_SG" : { + "file" : "DateTime/Locale/zh_Hans_SG.pm" + }, + "DateTime::Locale::zh_Hant" : { + "file" : "DateTime/Locale/zh_Hant.pm" + }, + "DateTime::Locale::zh_Hant_HK" : { + "file" : "DateTime/Locale/zh_Hant_HK.pm" + }, + "DateTime::Locale::zh_Hant_MO" : { + "file" : "DateTime/Locale/zh_Hant_MO.pm" + }, + "DateTime::Locale::zh_Hant_TW" : { + "file" : "DateTime/Locale/zh_Hant_TW.pm" + }, + "DateTime::Locale::zh_MO" : { + "file" : "DateTime/Locale/zh_MO.pm" + }, + "DateTime::Locale::zh_SG" : { + "file" : "DateTime/Locale/zh_SG.pm" + }, + "DateTime::Locale::zh_TW" : { + "file" : "DateTime/Locale/zh_TW.pm" + }, + "DateTime::Locale::zu" : { + "file" : "DateTime/Locale/zu.pm" + }, + "DateTime::Locale::zu_ZA" : { + "file" : "DateTime/Locale/zu_ZA.pm" + } + }, + "version" : "0.45" + }, + "DateTime::TimeZone" : { + "dist" : "DateTime-TimeZone-1.42", + "module" : "DateTime::TimeZone", + "mymeta" : { + "abstract" : "Time zone object base class and factory", + "author" : [ + "Dave Rolsky <autarch@urth.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.300002, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "DateTime-TimeZone", + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.58" + } + }, + "runtime" : { + "requires" : { + "Class::Load" : 0, + "Class::Singleton" : "1.03", + "Cwd" : "3", + "Params::Validate" : "0.72", + "Pod::Man" : "1.14", + "parent" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=DateTime-TimeZone" + }, + "repository" : { + "type" : "git", + "url" : "git://git.urth.org/DateTime-TimeZone.git" + } + }, + "version" : "1.42" + }, + "name" : "DateTime::TimeZone", + "pathname" : "D/DR/DROLSKY/DateTime-TimeZone-1.42.tar.gz", + "provides" : { + "DateTime::TimeZone" : { + "file" : "DateTime/TimeZone.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Abidjan" : { + "file" : "DateTime/TimeZone/Africa/Abidjan.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Accra" : { + "file" : "DateTime/TimeZone/Africa/Accra.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Addis_Ababa" : { + "file" : "DateTime/TimeZone/Africa/Addis_Ababa.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Algiers" : { + "file" : "DateTime/TimeZone/Africa/Algiers.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Asmara" : { + "file" : "DateTime/TimeZone/Africa/Asmara.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Bamako" : { + "file" : "DateTime/TimeZone/Africa/Bamako.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Bangui" : { + "file" : "DateTime/TimeZone/Africa/Bangui.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Banjul" : { + "file" : "DateTime/TimeZone/Africa/Banjul.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Bissau" : { + "file" : "DateTime/TimeZone/Africa/Bissau.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Blantyre" : { + "file" : "DateTime/TimeZone/Africa/Blantyre.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Brazzaville" : { + "file" : "DateTime/TimeZone/Africa/Brazzaville.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Bujumbura" : { + "file" : "DateTime/TimeZone/Africa/Bujumbura.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Cairo" : { + "file" : "DateTime/TimeZone/Africa/Cairo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Casablanca" : { + "file" : "DateTime/TimeZone/Africa/Casablanca.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Ceuta" : { + "file" : "DateTime/TimeZone/Africa/Ceuta.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Conakry" : { + "file" : "DateTime/TimeZone/Africa/Conakry.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Dakar" : { + "file" : "DateTime/TimeZone/Africa/Dakar.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Dar_es_Salaam" : { + "file" : "DateTime/TimeZone/Africa/Dar_es_Salaam.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Djibouti" : { + "file" : "DateTime/TimeZone/Africa/Djibouti.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Douala" : { + "file" : "DateTime/TimeZone/Africa/Douala.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::El_Aaiun" : { + "file" : "DateTime/TimeZone/Africa/El_Aaiun.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Freetown" : { + "file" : "DateTime/TimeZone/Africa/Freetown.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Gaborone" : { + "file" : "DateTime/TimeZone/Africa/Gaborone.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Harare" : { + "file" : "DateTime/TimeZone/Africa/Harare.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Johannesburg" : { + "file" : "DateTime/TimeZone/Africa/Johannesburg.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Juba" : { + "file" : "DateTime/TimeZone/Africa/Juba.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Kampala" : { + "file" : "DateTime/TimeZone/Africa/Kampala.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Khartoum" : { + "file" : "DateTime/TimeZone/Africa/Khartoum.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Kigali" : { + "file" : "DateTime/TimeZone/Africa/Kigali.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Kinshasa" : { + "file" : "DateTime/TimeZone/Africa/Kinshasa.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Lagos" : { + "file" : "DateTime/TimeZone/Africa/Lagos.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Libreville" : { + "file" : "DateTime/TimeZone/Africa/Libreville.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Lome" : { + "file" : "DateTime/TimeZone/Africa/Lome.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Luanda" : { + "file" : "DateTime/TimeZone/Africa/Luanda.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Lubumbashi" : { + "file" : "DateTime/TimeZone/Africa/Lubumbashi.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Lusaka" : { + "file" : "DateTime/TimeZone/Africa/Lusaka.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Malabo" : { + "file" : "DateTime/TimeZone/Africa/Malabo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Maputo" : { + "file" : "DateTime/TimeZone/Africa/Maputo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Maseru" : { + "file" : "DateTime/TimeZone/Africa/Maseru.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Mbabane" : { + "file" : "DateTime/TimeZone/Africa/Mbabane.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Mogadishu" : { + "file" : "DateTime/TimeZone/Africa/Mogadishu.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Monrovia" : { + "file" : "DateTime/TimeZone/Africa/Monrovia.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Nairobi" : { + "file" : "DateTime/TimeZone/Africa/Nairobi.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Ndjamena" : { + "file" : "DateTime/TimeZone/Africa/Ndjamena.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Niamey" : { + "file" : "DateTime/TimeZone/Africa/Niamey.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Nouakchott" : { + "file" : "DateTime/TimeZone/Africa/Nouakchott.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Ouagadougou" : { + "file" : "DateTime/TimeZone/Africa/Ouagadougou.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Porto_Novo" : { + "file" : "DateTime/TimeZone/Africa/Porto_Novo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Sao_Tome" : { + "file" : "DateTime/TimeZone/Africa/Sao_Tome.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Tripoli" : { + "file" : "DateTime/TimeZone/Africa/Tripoli.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Tunis" : { + "file" : "DateTime/TimeZone/Africa/Tunis.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Africa::Windhoek" : { + "file" : "DateTime/TimeZone/Africa/Windhoek.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Adak" : { + "file" : "DateTime/TimeZone/America/Adak.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Anchorage" : { + "file" : "DateTime/TimeZone/America/Anchorage.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Anguilla" : { + "file" : "DateTime/TimeZone/America/Anguilla.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Antigua" : { + "file" : "DateTime/TimeZone/America/Antigua.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Araguaina" : { + "file" : "DateTime/TimeZone/America/Araguaina.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Argentina::Buenos_Aires" : { + "file" : "DateTime/TimeZone/America/Argentina/Buenos_Aires.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Argentina::Catamarca" : { + "file" : "DateTime/TimeZone/America/Argentina/Catamarca.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Argentina::Cordoba" : { + "file" : "DateTime/TimeZone/America/Argentina/Cordoba.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Argentina::Jujuy" : { + "file" : "DateTime/TimeZone/America/Argentina/Jujuy.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Argentina::La_Rioja" : { + "file" : "DateTime/TimeZone/America/Argentina/La_Rioja.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Argentina::Mendoza" : { + "file" : "DateTime/TimeZone/America/Argentina/Mendoza.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Argentina::Rio_Gallegos" : { + "file" : "DateTime/TimeZone/America/Argentina/Rio_Gallegos.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Argentina::Salta" : { + "file" : "DateTime/TimeZone/America/Argentina/Salta.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Argentina::San_Juan" : { + "file" : "DateTime/TimeZone/America/Argentina/San_Juan.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Argentina::San_Luis" : { + "file" : "DateTime/TimeZone/America/Argentina/San_Luis.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Argentina::Tucuman" : { + "file" : "DateTime/TimeZone/America/Argentina/Tucuman.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Argentina::Ushuaia" : { + "file" : "DateTime/TimeZone/America/Argentina/Ushuaia.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Aruba" : { + "file" : "DateTime/TimeZone/America/Aruba.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Asuncion" : { + "file" : "DateTime/TimeZone/America/Asuncion.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Atikokan" : { + "file" : "DateTime/TimeZone/America/Atikokan.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Bahia" : { + "file" : "DateTime/TimeZone/America/Bahia.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Bahia_Banderas" : { + "file" : "DateTime/TimeZone/America/Bahia_Banderas.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Barbados" : { + "file" : "DateTime/TimeZone/America/Barbados.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Belem" : { + "file" : "DateTime/TimeZone/America/Belem.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Belize" : { + "file" : "DateTime/TimeZone/America/Belize.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Blanc_Sablon" : { + "file" : "DateTime/TimeZone/America/Blanc_Sablon.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Boa_Vista" : { + "file" : "DateTime/TimeZone/America/Boa_Vista.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Bogota" : { + "file" : "DateTime/TimeZone/America/Bogota.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Boise" : { + "file" : "DateTime/TimeZone/America/Boise.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Cambridge_Bay" : { + "file" : "DateTime/TimeZone/America/Cambridge_Bay.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Campo_Grande" : { + "file" : "DateTime/TimeZone/America/Campo_Grande.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Cancun" : { + "file" : "DateTime/TimeZone/America/Cancun.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Caracas" : { + "file" : "DateTime/TimeZone/America/Caracas.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Cayenne" : { + "file" : "DateTime/TimeZone/America/Cayenne.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Cayman" : { + "file" : "DateTime/TimeZone/America/Cayman.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Chicago" : { + "file" : "DateTime/TimeZone/America/Chicago.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Chihuahua" : { + "file" : "DateTime/TimeZone/America/Chihuahua.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Costa_Rica" : { + "file" : "DateTime/TimeZone/America/Costa_Rica.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Cuiaba" : { + "file" : "DateTime/TimeZone/America/Cuiaba.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Curacao" : { + "file" : "DateTime/TimeZone/America/Curacao.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Danmarkshavn" : { + "file" : "DateTime/TimeZone/America/Danmarkshavn.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Dawson" : { + "file" : "DateTime/TimeZone/America/Dawson.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Dawson_Creek" : { + "file" : "DateTime/TimeZone/America/Dawson_Creek.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Denver" : { + "file" : "DateTime/TimeZone/America/Denver.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Detroit" : { + "file" : "DateTime/TimeZone/America/Detroit.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Dominica" : { + "file" : "DateTime/TimeZone/America/Dominica.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Edmonton" : { + "file" : "DateTime/TimeZone/America/Edmonton.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Eirunepe" : { + "file" : "DateTime/TimeZone/America/Eirunepe.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::El_Salvador" : { + "file" : "DateTime/TimeZone/America/El_Salvador.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Fortaleza" : { + "file" : "DateTime/TimeZone/America/Fortaleza.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Glace_Bay" : { + "file" : "DateTime/TimeZone/America/Glace_Bay.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Godthab" : { + "file" : "DateTime/TimeZone/America/Godthab.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Goose_Bay" : { + "file" : "DateTime/TimeZone/America/Goose_Bay.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Grand_Turk" : { + "file" : "DateTime/TimeZone/America/Grand_Turk.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Grenada" : { + "file" : "DateTime/TimeZone/America/Grenada.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Guadeloupe" : { + "file" : "DateTime/TimeZone/America/Guadeloupe.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Guatemala" : { + "file" : "DateTime/TimeZone/America/Guatemala.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Guayaquil" : { + "file" : "DateTime/TimeZone/America/Guayaquil.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Guyana" : { + "file" : "DateTime/TimeZone/America/Guyana.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Halifax" : { + "file" : "DateTime/TimeZone/America/Halifax.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Havana" : { + "file" : "DateTime/TimeZone/America/Havana.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Hermosillo" : { + "file" : "DateTime/TimeZone/America/Hermosillo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Indiana::Indianapolis" : { + "file" : "DateTime/TimeZone/America/Indiana/Indianapolis.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Indiana::Knox" : { + "file" : "DateTime/TimeZone/America/Indiana/Knox.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Indiana::Marengo" : { + "file" : "DateTime/TimeZone/America/Indiana/Marengo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Indiana::Petersburg" : { + "file" : "DateTime/TimeZone/America/Indiana/Petersburg.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Indiana::Tell_City" : { + "file" : "DateTime/TimeZone/America/Indiana/Tell_City.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Indiana::Vevay" : { + "file" : "DateTime/TimeZone/America/Indiana/Vevay.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Indiana::Vincennes" : { + "file" : "DateTime/TimeZone/America/Indiana/Vincennes.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Indiana::Winamac" : { + "file" : "DateTime/TimeZone/America/Indiana/Winamac.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Inuvik" : { + "file" : "DateTime/TimeZone/America/Inuvik.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Iqaluit" : { + "file" : "DateTime/TimeZone/America/Iqaluit.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Jamaica" : { + "file" : "DateTime/TimeZone/America/Jamaica.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Juneau" : { + "file" : "DateTime/TimeZone/America/Juneau.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Kentucky::Louisville" : { + "file" : "DateTime/TimeZone/America/Kentucky/Louisville.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Kentucky::Monticello" : { + "file" : "DateTime/TimeZone/America/Kentucky/Monticello.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::La_Paz" : { + "file" : "DateTime/TimeZone/America/La_Paz.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Lima" : { + "file" : "DateTime/TimeZone/America/Lima.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Los_Angeles" : { + "file" : "DateTime/TimeZone/America/Los_Angeles.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Maceio" : { + "file" : "DateTime/TimeZone/America/Maceio.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Managua" : { + "file" : "DateTime/TimeZone/America/Managua.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Manaus" : { + "file" : "DateTime/TimeZone/America/Manaus.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Martinique" : { + "file" : "DateTime/TimeZone/America/Martinique.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Matamoros" : { + "file" : "DateTime/TimeZone/America/Matamoros.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Mazatlan" : { + "file" : "DateTime/TimeZone/America/Mazatlan.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Menominee" : { + "file" : "DateTime/TimeZone/America/Menominee.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Merida" : { + "file" : "DateTime/TimeZone/America/Merida.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Metlakatla" : { + "file" : "DateTime/TimeZone/America/Metlakatla.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Mexico_City" : { + "file" : "DateTime/TimeZone/America/Mexico_City.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Miquelon" : { + "file" : "DateTime/TimeZone/America/Miquelon.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Moncton" : { + "file" : "DateTime/TimeZone/America/Moncton.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Monterrey" : { + "file" : "DateTime/TimeZone/America/Monterrey.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Montevideo" : { + "file" : "DateTime/TimeZone/America/Montevideo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Montreal" : { + "file" : "DateTime/TimeZone/America/Montreal.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Montserrat" : { + "file" : "DateTime/TimeZone/America/Montserrat.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Nassau" : { + "file" : "DateTime/TimeZone/America/Nassau.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::New_York" : { + "file" : "DateTime/TimeZone/America/New_York.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Nipigon" : { + "file" : "DateTime/TimeZone/America/Nipigon.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Nome" : { + "file" : "DateTime/TimeZone/America/Nome.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Noronha" : { + "file" : "DateTime/TimeZone/America/Noronha.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::North_Dakota::Beulah" : { + "file" : "DateTime/TimeZone/America/North_Dakota/Beulah.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::North_Dakota::Center" : { + "file" : "DateTime/TimeZone/America/North_Dakota/Center.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::North_Dakota::New_Salem" : { + "file" : "DateTime/TimeZone/America/North_Dakota/New_Salem.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Ojinaga" : { + "file" : "DateTime/TimeZone/America/Ojinaga.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Panama" : { + "file" : "DateTime/TimeZone/America/Panama.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Pangnirtung" : { + "file" : "DateTime/TimeZone/America/Pangnirtung.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Paramaribo" : { + "file" : "DateTime/TimeZone/America/Paramaribo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Phoenix" : { + "file" : "DateTime/TimeZone/America/Phoenix.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Port_au_Prince" : { + "file" : "DateTime/TimeZone/America/Port_au_Prince.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Port_of_Spain" : { + "file" : "DateTime/TimeZone/America/Port_of_Spain.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Porto_Velho" : { + "file" : "DateTime/TimeZone/America/Porto_Velho.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Puerto_Rico" : { + "file" : "DateTime/TimeZone/America/Puerto_Rico.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Rainy_River" : { + "file" : "DateTime/TimeZone/America/Rainy_River.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Rankin_Inlet" : { + "file" : "DateTime/TimeZone/America/Rankin_Inlet.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Recife" : { + "file" : "DateTime/TimeZone/America/Recife.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Regina" : { + "file" : "DateTime/TimeZone/America/Regina.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Resolute" : { + "file" : "DateTime/TimeZone/America/Resolute.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Rio_Branco" : { + "file" : "DateTime/TimeZone/America/Rio_Branco.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Santa_Isabel" : { + "file" : "DateTime/TimeZone/America/Santa_Isabel.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Santarem" : { + "file" : "DateTime/TimeZone/America/Santarem.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Santiago" : { + "file" : "DateTime/TimeZone/America/Santiago.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Santo_Domingo" : { + "file" : "DateTime/TimeZone/America/Santo_Domingo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Sao_Paulo" : { + "file" : "DateTime/TimeZone/America/Sao_Paulo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Scoresbysund" : { + "file" : "DateTime/TimeZone/America/Scoresbysund.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Sitka" : { + "file" : "DateTime/TimeZone/America/Sitka.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::St_Johns" : { + "file" : "DateTime/TimeZone/America/St_Johns.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::St_Kitts" : { + "file" : "DateTime/TimeZone/America/St_Kitts.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::St_Lucia" : { + "file" : "DateTime/TimeZone/America/St_Lucia.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::St_Thomas" : { + "file" : "DateTime/TimeZone/America/St_Thomas.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::St_Vincent" : { + "file" : "DateTime/TimeZone/America/St_Vincent.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Swift_Current" : { + "file" : "DateTime/TimeZone/America/Swift_Current.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Tegucigalpa" : { + "file" : "DateTime/TimeZone/America/Tegucigalpa.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Thule" : { + "file" : "DateTime/TimeZone/America/Thule.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Thunder_Bay" : { + "file" : "DateTime/TimeZone/America/Thunder_Bay.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Tijuana" : { + "file" : "DateTime/TimeZone/America/Tijuana.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Toronto" : { + "file" : "DateTime/TimeZone/America/Toronto.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Tortola" : { + "file" : "DateTime/TimeZone/America/Tortola.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Vancouver" : { + "file" : "DateTime/TimeZone/America/Vancouver.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Whitehorse" : { + "file" : "DateTime/TimeZone/America/Whitehorse.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Winnipeg" : { + "file" : "DateTime/TimeZone/America/Winnipeg.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Yakutat" : { + "file" : "DateTime/TimeZone/America/Yakutat.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::America::Yellowknife" : { + "file" : "DateTime/TimeZone/America/Yellowknife.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Antarctica::Casey" : { + "file" : "DateTime/TimeZone/Antarctica/Casey.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Antarctica::Davis" : { + "file" : "DateTime/TimeZone/Antarctica/Davis.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Antarctica::DumontDUrville" : { + "file" : "DateTime/TimeZone/Antarctica/DumontDUrville.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Antarctica::Macquarie" : { + "file" : "DateTime/TimeZone/Antarctica/Macquarie.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Antarctica::Mawson" : { + "file" : "DateTime/TimeZone/Antarctica/Mawson.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Antarctica::McMurdo" : { + "file" : "DateTime/TimeZone/Antarctica/McMurdo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Antarctica::Palmer" : { + "file" : "DateTime/TimeZone/Antarctica/Palmer.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Antarctica::Rothera" : { + "file" : "DateTime/TimeZone/Antarctica/Rothera.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Antarctica::Syowa" : { + "file" : "DateTime/TimeZone/Antarctica/Syowa.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Antarctica::Vostok" : { + "file" : "DateTime/TimeZone/Antarctica/Vostok.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Aden" : { + "file" : "DateTime/TimeZone/Asia/Aden.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Almaty" : { + "file" : "DateTime/TimeZone/Asia/Almaty.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Amman" : { + "file" : "DateTime/TimeZone/Asia/Amman.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Anadyr" : { + "file" : "DateTime/TimeZone/Asia/Anadyr.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Aqtau" : { + "file" : "DateTime/TimeZone/Asia/Aqtau.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Aqtobe" : { + "file" : "DateTime/TimeZone/Asia/Aqtobe.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Ashgabat" : { + "file" : "DateTime/TimeZone/Asia/Ashgabat.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Baghdad" : { + "file" : "DateTime/TimeZone/Asia/Baghdad.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Bahrain" : { + "file" : "DateTime/TimeZone/Asia/Bahrain.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Baku" : { + "file" : "DateTime/TimeZone/Asia/Baku.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Bangkok" : { + "file" : "DateTime/TimeZone/Asia/Bangkok.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Beirut" : { + "file" : "DateTime/TimeZone/Asia/Beirut.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Bishkek" : { + "file" : "DateTime/TimeZone/Asia/Bishkek.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Brunei" : { + "file" : "DateTime/TimeZone/Asia/Brunei.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Choibalsan" : { + "file" : "DateTime/TimeZone/Asia/Choibalsan.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Chongqing" : { + "file" : "DateTime/TimeZone/Asia/Chongqing.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Colombo" : { + "file" : "DateTime/TimeZone/Asia/Colombo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Damascus" : { + "file" : "DateTime/TimeZone/Asia/Damascus.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Dhaka" : { + "file" : "DateTime/TimeZone/Asia/Dhaka.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Dili" : { + "file" : "DateTime/TimeZone/Asia/Dili.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Dubai" : { + "file" : "DateTime/TimeZone/Asia/Dubai.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Dushanbe" : { + "file" : "DateTime/TimeZone/Asia/Dushanbe.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Gaza" : { + "file" : "DateTime/TimeZone/Asia/Gaza.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Harbin" : { + "file" : "DateTime/TimeZone/Asia/Harbin.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Hebron" : { + "file" : "DateTime/TimeZone/Asia/Hebron.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Ho_Chi_Minh" : { + "file" : "DateTime/TimeZone/Asia/Ho_Chi_Minh.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Hong_Kong" : { + "file" : "DateTime/TimeZone/Asia/Hong_Kong.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Hovd" : { + "file" : "DateTime/TimeZone/Asia/Hovd.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Irkutsk" : { + "file" : "DateTime/TimeZone/Asia/Irkutsk.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Jakarta" : { + "file" : "DateTime/TimeZone/Asia/Jakarta.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Jayapura" : { + "file" : "DateTime/TimeZone/Asia/Jayapura.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Jerusalem" : { + "file" : "DateTime/TimeZone/Asia/Jerusalem.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Kabul" : { + "file" : "DateTime/TimeZone/Asia/Kabul.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Kamchatka" : { + "file" : "DateTime/TimeZone/Asia/Kamchatka.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Karachi" : { + "file" : "DateTime/TimeZone/Asia/Karachi.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Kashgar" : { + "file" : "DateTime/TimeZone/Asia/Kashgar.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Kathmandu" : { + "file" : "DateTime/TimeZone/Asia/Kathmandu.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Kolkata" : { + "file" : "DateTime/TimeZone/Asia/Kolkata.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Krasnoyarsk" : { + "file" : "DateTime/TimeZone/Asia/Krasnoyarsk.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Kuala_Lumpur" : { + "file" : "DateTime/TimeZone/Asia/Kuala_Lumpur.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Kuching" : { + "file" : "DateTime/TimeZone/Asia/Kuching.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Kuwait" : { + "file" : "DateTime/TimeZone/Asia/Kuwait.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Macau" : { + "file" : "DateTime/TimeZone/Asia/Macau.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Magadan" : { + "file" : "DateTime/TimeZone/Asia/Magadan.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Makassar" : { + "file" : "DateTime/TimeZone/Asia/Makassar.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Manila" : { + "file" : "DateTime/TimeZone/Asia/Manila.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Muscat" : { + "file" : "DateTime/TimeZone/Asia/Muscat.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Nicosia" : { + "file" : "DateTime/TimeZone/Asia/Nicosia.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Novokuznetsk" : { + "file" : "DateTime/TimeZone/Asia/Novokuznetsk.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Novosibirsk" : { + "file" : "DateTime/TimeZone/Asia/Novosibirsk.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Omsk" : { + "file" : "DateTime/TimeZone/Asia/Omsk.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Oral" : { + "file" : "DateTime/TimeZone/Asia/Oral.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Phnom_Penh" : { + "file" : "DateTime/TimeZone/Asia/Phnom_Penh.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Pontianak" : { + "file" : "DateTime/TimeZone/Asia/Pontianak.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Pyongyang" : { + "file" : "DateTime/TimeZone/Asia/Pyongyang.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Qatar" : { + "file" : "DateTime/TimeZone/Asia/Qatar.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Qyzylorda" : { + "file" : "DateTime/TimeZone/Asia/Qyzylorda.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Rangoon" : { + "file" : "DateTime/TimeZone/Asia/Rangoon.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Riyadh" : { + "file" : "DateTime/TimeZone/Asia/Riyadh.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Sakhalin" : { + "file" : "DateTime/TimeZone/Asia/Sakhalin.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Samarkand" : { + "file" : "DateTime/TimeZone/Asia/Samarkand.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Seoul" : { + "file" : "DateTime/TimeZone/Asia/Seoul.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Shanghai" : { + "file" : "DateTime/TimeZone/Asia/Shanghai.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Singapore" : { + "file" : "DateTime/TimeZone/Asia/Singapore.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Taipei" : { + "file" : "DateTime/TimeZone/Asia/Taipei.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Tashkent" : { + "file" : "DateTime/TimeZone/Asia/Tashkent.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Tbilisi" : { + "file" : "DateTime/TimeZone/Asia/Tbilisi.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Tehran" : { + "file" : "DateTime/TimeZone/Asia/Tehran.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Thimphu" : { + "file" : "DateTime/TimeZone/Asia/Thimphu.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Tokyo" : { + "file" : "DateTime/TimeZone/Asia/Tokyo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Ulaanbaatar" : { + "file" : "DateTime/TimeZone/Asia/Ulaanbaatar.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Urumqi" : { + "file" : "DateTime/TimeZone/Asia/Urumqi.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Vientiane" : { + "file" : "DateTime/TimeZone/Asia/Vientiane.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Vladivostok" : { + "file" : "DateTime/TimeZone/Asia/Vladivostok.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Yakutsk" : { + "file" : "DateTime/TimeZone/Asia/Yakutsk.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Yekaterinburg" : { + "file" : "DateTime/TimeZone/Asia/Yekaterinburg.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Asia::Yerevan" : { + "file" : "DateTime/TimeZone/Asia/Yerevan.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Atlantic::Azores" : { + "file" : "DateTime/TimeZone/Atlantic/Azores.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Atlantic::Bermuda" : { + "file" : "DateTime/TimeZone/Atlantic/Bermuda.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Atlantic::Canary" : { + "file" : "DateTime/TimeZone/Atlantic/Canary.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Atlantic::Cape_Verde" : { + "file" : "DateTime/TimeZone/Atlantic/Cape_Verde.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Atlantic::Faroe" : { + "file" : "DateTime/TimeZone/Atlantic/Faroe.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Atlantic::Madeira" : { + "file" : "DateTime/TimeZone/Atlantic/Madeira.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Atlantic::Reykjavik" : { + "file" : "DateTime/TimeZone/Atlantic/Reykjavik.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Atlantic::South_Georgia" : { + "file" : "DateTime/TimeZone/Atlantic/South_Georgia.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Atlantic::St_Helena" : { + "file" : "DateTime/TimeZone/Atlantic/St_Helena.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Atlantic::Stanley" : { + "file" : "DateTime/TimeZone/Atlantic/Stanley.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Australia::Adelaide" : { + "file" : "DateTime/TimeZone/Australia/Adelaide.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Australia::Brisbane" : { + "file" : "DateTime/TimeZone/Australia/Brisbane.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Australia::Broken_Hill" : { + "file" : "DateTime/TimeZone/Australia/Broken_Hill.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Australia::Currie" : { + "file" : "DateTime/TimeZone/Australia/Currie.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Australia::Darwin" : { + "file" : "DateTime/TimeZone/Australia/Darwin.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Australia::Eucla" : { + "file" : "DateTime/TimeZone/Australia/Eucla.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Australia::Hobart" : { + "file" : "DateTime/TimeZone/Australia/Hobart.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Australia::Lindeman" : { + "file" : "DateTime/TimeZone/Australia/Lindeman.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Australia::Lord_Howe" : { + "file" : "DateTime/TimeZone/Australia/Lord_Howe.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Australia::Melbourne" : { + "file" : "DateTime/TimeZone/Australia/Melbourne.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Australia::Perth" : { + "file" : "DateTime/TimeZone/Australia/Perth.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Australia::Sydney" : { + "file" : "DateTime/TimeZone/Australia/Sydney.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::CET" : { + "file" : "DateTime/TimeZone/CET.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::CST6CDT" : { + "file" : "DateTime/TimeZone/CST6CDT.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Catalog" : { + "file" : "DateTime/TimeZone/Catalog.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::EET" : { + "file" : "DateTime/TimeZone/EET.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::EST" : { + "file" : "DateTime/TimeZone/EST.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::EST5EDT" : { + "file" : "DateTime/TimeZone/EST5EDT.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Amsterdam" : { + "file" : "DateTime/TimeZone/Europe/Amsterdam.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Andorra" : { + "file" : "DateTime/TimeZone/Europe/Andorra.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Athens" : { + "file" : "DateTime/TimeZone/Europe/Athens.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Belgrade" : { + "file" : "DateTime/TimeZone/Europe/Belgrade.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Berlin" : { + "file" : "DateTime/TimeZone/Europe/Berlin.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Brussels" : { + "file" : "DateTime/TimeZone/Europe/Brussels.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Bucharest" : { + "file" : "DateTime/TimeZone/Europe/Bucharest.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Budapest" : { + "file" : "DateTime/TimeZone/Europe/Budapest.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Chisinau" : { + "file" : "DateTime/TimeZone/Europe/Chisinau.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Copenhagen" : { + "file" : "DateTime/TimeZone/Europe/Copenhagen.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Dublin" : { + "file" : "DateTime/TimeZone/Europe/Dublin.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Gibraltar" : { + "file" : "DateTime/TimeZone/Europe/Gibraltar.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Helsinki" : { + "file" : "DateTime/TimeZone/Europe/Helsinki.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Istanbul" : { + "file" : "DateTime/TimeZone/Europe/Istanbul.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Kaliningrad" : { + "file" : "DateTime/TimeZone/Europe/Kaliningrad.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Kiev" : { + "file" : "DateTime/TimeZone/Europe/Kiev.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Lisbon" : { + "file" : "DateTime/TimeZone/Europe/Lisbon.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::London" : { + "file" : "DateTime/TimeZone/Europe/London.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Luxembourg" : { + "file" : "DateTime/TimeZone/Europe/Luxembourg.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Madrid" : { + "file" : "DateTime/TimeZone/Europe/Madrid.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Malta" : { + "file" : "DateTime/TimeZone/Europe/Malta.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Minsk" : { + "file" : "DateTime/TimeZone/Europe/Minsk.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Monaco" : { + "file" : "DateTime/TimeZone/Europe/Monaco.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Moscow" : { + "file" : "DateTime/TimeZone/Europe/Moscow.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Oslo" : { + "file" : "DateTime/TimeZone/Europe/Oslo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Paris" : { + "file" : "DateTime/TimeZone/Europe/Paris.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Prague" : { + "file" : "DateTime/TimeZone/Europe/Prague.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Riga" : { + "file" : "DateTime/TimeZone/Europe/Riga.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Rome" : { + "file" : "DateTime/TimeZone/Europe/Rome.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Samara" : { + "file" : "DateTime/TimeZone/Europe/Samara.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Simferopol" : { + "file" : "DateTime/TimeZone/Europe/Simferopol.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Sofia" : { + "file" : "DateTime/TimeZone/Europe/Sofia.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Stockholm" : { + "file" : "DateTime/TimeZone/Europe/Stockholm.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Tallinn" : { + "file" : "DateTime/TimeZone/Europe/Tallinn.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Tirane" : { + "file" : "DateTime/TimeZone/Europe/Tirane.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Uzhgorod" : { + "file" : "DateTime/TimeZone/Europe/Uzhgorod.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Vaduz" : { + "file" : "DateTime/TimeZone/Europe/Vaduz.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Vienna" : { + "file" : "DateTime/TimeZone/Europe/Vienna.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Vilnius" : { + "file" : "DateTime/TimeZone/Europe/Vilnius.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Volgograd" : { + "file" : "DateTime/TimeZone/Europe/Volgograd.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Warsaw" : { + "file" : "DateTime/TimeZone/Europe/Warsaw.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Zaporozhye" : { + "file" : "DateTime/TimeZone/Europe/Zaporozhye.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Europe::Zurich" : { + "file" : "DateTime/TimeZone/Europe/Zurich.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Floating" : { + "file" : "DateTime/TimeZone/Floating.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::HST" : { + "file" : "DateTime/TimeZone/HST.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Indian::Antananarivo" : { + "file" : "DateTime/TimeZone/Indian/Antananarivo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Indian::Chagos" : { + "file" : "DateTime/TimeZone/Indian/Chagos.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Indian::Christmas" : { + "file" : "DateTime/TimeZone/Indian/Christmas.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Indian::Cocos" : { + "file" : "DateTime/TimeZone/Indian/Cocos.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Indian::Comoro" : { + "file" : "DateTime/TimeZone/Indian/Comoro.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Indian::Kerguelen" : { + "file" : "DateTime/TimeZone/Indian/Kerguelen.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Indian::Mahe" : { + "file" : "DateTime/TimeZone/Indian/Mahe.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Indian::Maldives" : { + "file" : "DateTime/TimeZone/Indian/Maldives.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Indian::Mauritius" : { + "file" : "DateTime/TimeZone/Indian/Mauritius.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Indian::Mayotte" : { + "file" : "DateTime/TimeZone/Indian/Mayotte.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Indian::Reunion" : { + "file" : "DateTime/TimeZone/Indian/Reunion.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Local" : { + "file" : "DateTime/TimeZone/Local.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Local::Unix" : { + "file" : "DateTime/TimeZone/Local/Unix.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Local::VMS" : { + "file" : "DateTime/TimeZone/Local/VMS.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Local::Win32" : { + "file" : "DateTime/TimeZone/Local/Win32.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::MET" : { + "file" : "DateTime/TimeZone/MET.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::MST" : { + "file" : "DateTime/TimeZone/MST.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::MST7MDT" : { + "file" : "DateTime/TimeZone/MST7MDT.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::OffsetOnly" : { + "file" : "DateTime/TimeZone/OffsetOnly.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::OlsonDB" : { + "file" : "DateTime/TimeZone/OlsonDB.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::OlsonDB::Change" : { + "file" : "DateTime/TimeZone/OlsonDB/Change.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::OlsonDB::Observance" : { + "file" : "DateTime/TimeZone/OlsonDB/Observance.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::OlsonDB::Rule" : { + "file" : "DateTime/TimeZone/OlsonDB/Rule.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::OlsonDB::Zone" : { + "file" : "DateTime/TimeZone/OlsonDB/Zone.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::PST8PDT" : { + "file" : "DateTime/TimeZone/PST8PDT.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Apia" : { + "file" : "DateTime/TimeZone/Pacific/Apia.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Auckland" : { + "file" : "DateTime/TimeZone/Pacific/Auckland.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Chatham" : { + "file" : "DateTime/TimeZone/Pacific/Chatham.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Chuuk" : { + "file" : "DateTime/TimeZone/Pacific/Chuuk.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Easter" : { + "file" : "DateTime/TimeZone/Pacific/Easter.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Efate" : { + "file" : "DateTime/TimeZone/Pacific/Efate.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Enderbury" : { + "file" : "DateTime/TimeZone/Pacific/Enderbury.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Fakaofo" : { + "file" : "DateTime/TimeZone/Pacific/Fakaofo.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Fiji" : { + "file" : "DateTime/TimeZone/Pacific/Fiji.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Funafuti" : { + "file" : "DateTime/TimeZone/Pacific/Funafuti.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Galapagos" : { + "file" : "DateTime/TimeZone/Pacific/Galapagos.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Gambier" : { + "file" : "DateTime/TimeZone/Pacific/Gambier.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Guadalcanal" : { + "file" : "DateTime/TimeZone/Pacific/Guadalcanal.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Guam" : { + "file" : "DateTime/TimeZone/Pacific/Guam.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Honolulu" : { + "file" : "DateTime/TimeZone/Pacific/Honolulu.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Johnston" : { + "file" : "DateTime/TimeZone/Pacific/Johnston.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Kiritimati" : { + "file" : "DateTime/TimeZone/Pacific/Kiritimati.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Kosrae" : { + "file" : "DateTime/TimeZone/Pacific/Kosrae.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Kwajalein" : { + "file" : "DateTime/TimeZone/Pacific/Kwajalein.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Majuro" : { + "file" : "DateTime/TimeZone/Pacific/Majuro.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Marquesas" : { + "file" : "DateTime/TimeZone/Pacific/Marquesas.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Midway" : { + "file" : "DateTime/TimeZone/Pacific/Midway.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Nauru" : { + "file" : "DateTime/TimeZone/Pacific/Nauru.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Niue" : { + "file" : "DateTime/TimeZone/Pacific/Niue.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Norfolk" : { + "file" : "DateTime/TimeZone/Pacific/Norfolk.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Noumea" : { + "file" : "DateTime/TimeZone/Pacific/Noumea.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Pago_Pago" : { + "file" : "DateTime/TimeZone/Pacific/Pago_Pago.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Palau" : { + "file" : "DateTime/TimeZone/Pacific/Palau.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Pitcairn" : { + "file" : "DateTime/TimeZone/Pacific/Pitcairn.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Pohnpei" : { + "file" : "DateTime/TimeZone/Pacific/Pohnpei.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Port_Moresby" : { + "file" : "DateTime/TimeZone/Pacific/Port_Moresby.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Rarotonga" : { + "file" : "DateTime/TimeZone/Pacific/Rarotonga.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Saipan" : { + "file" : "DateTime/TimeZone/Pacific/Saipan.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Tahiti" : { + "file" : "DateTime/TimeZone/Pacific/Tahiti.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Tarawa" : { + "file" : "DateTime/TimeZone/Pacific/Tarawa.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Tongatapu" : { + "file" : "DateTime/TimeZone/Pacific/Tongatapu.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Wake" : { + "file" : "DateTime/TimeZone/Pacific/Wake.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::Pacific::Wallis" : { + "file" : "DateTime/TimeZone/Pacific/Wallis.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::UTC" : { + "file" : "DateTime/TimeZone/UTC.pm", + "version" : "1.42" + }, + "DateTime::TimeZone::WET" : { + "file" : "DateTime/TimeZone/WET.pm", + "version" : "1.42" + } + }, + "version" : "1.42" + }, + "Devel::GlobalDestruction" : { + "dist" : "Devel-GlobalDestruction-0.04", + "module" : "Devel::GlobalDestruction", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.57_05, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Devel-GlobalDestruction", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Sub::Exporter" : 0, + "perl" : "5.006000" + } + } + }, + "release_status" : "stable", + "version" : "0.04" + }, + "name" : "Devel::GlobalDestruction", + "pathname" : "F/FL/FLORA/Devel-GlobalDestruction-0.04.tar.gz", + "provides" : { + "Devel::GlobalDestruction" : { + "file" : "Devel/GlobalDestruction.pm", + "version" : "0.04" + } + }, + "version" : "0.04" + }, + "Devel::StackTrace" : { + "dist" : "Devel-StackTrace-1.27", + "module" : "Devel::StackTrace", + "mymeta" : { + "abstract" : "An object representing a stack trace", + "author" : [ + "Dave Rolsky <autarch@urth.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.200000, CPAN::Meta::Converter version 2.102400, CPAN::Meta::Converter version 2.112150", + "license" : [ + "artistic_2" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Devel-StackTrace", + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.31" + } + }, + "runtime" : { + "requires" : { + "File::Spec" : 0, + "Scalar::Util" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Devel-StackTrace" + }, + "repository" : { + "url" : "http://hg.urth.org/hg/Devel-StackTrace" + } + }, + "version" : "1.27" + }, + "name" : "Devel::StackTrace", + "pathname" : "D/DR/DROLSKY/Devel-StackTrace-1.27.tar.gz", + "provides" : { + "Devel::StackTrace" : { + "file" : "Devel/StackTrace.pm", + "version" : "1.27" + }, + "Devel::StackTrace::Frame" : { + "file" : "Devel/StackTrace/Frame.pm", + "version" : "1.27" + } + }, + "version" : "1.27" + }, + "Digest::SHA1" : { + "dist" : "Digest-SHA1-2.13", + "module" : "Digest::SHA1", + "mymeta" : { + "abstract" : "Perl interface to the SHA-1 algorithm", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Digest-SHA1", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Digest::base" : "1.00", + "perl" : "5.004" + } + } + }, + "release_status" : "stable", + "version" : "2.13", + "x_repository" : "http://github.com/gisle/digest-sha1" + }, + "name" : "Digest::SHA1", + "pathname" : "G/GA/GAAS/Digest-SHA1-2.13.tar.gz", + "provides" : { + "Digest::SHA1" : { + "file" : "Digest/SHA1.pm", + "version" : "2.13" + } + }, + "version" : "2.13" + }, + "Dir::Self" : { + "dist" : "Dir-Self-0.10", + "module" : "Dir::Self", + "mymeta" : { + "abstract" : "a __DIR__ constant for the directory your source file is in", + "author" : [ + "Lukas Mai <l.mai @web.de>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.44, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Dir-Self", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "File::Spec" : 0, + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.10" + }, + "name" : "Dir::Self", + "pathname" : "M/MA/MAUKE/Dir-Self-0.10.tar.gz", + "provides" : { + "Dir::Self" : { + "file" : "Dir/Self.pm", + "version" : "0.10" + } + }, + "version" : "0.10" + }, + "Dist::CheckConflicts" : { + "dist" : "Dist-CheckConflicts-0.02", + "module" : "Dist::CheckConflicts", + "mymeta" : { + "abstract" : "declare version conflicts for your dist", + "author" : [ + "Jesse Luehrs <doy at tozt dot net>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.200000, CPAN::Meta::Converter version 2.101670, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Dist-CheckConflicts", + "prereqs" : { + "build" : { + "requires" : { + "Test::Fatal" : 0, + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.31" + } + }, + "runtime" : { + "requires" : { + "List::MoreUtils" : "0.12", + "Sub::Exporter" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "type" : "git", + "url" : "git://github.com/doy/dist-checkconflicts.git" + } + }, + "version" : "0.02", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@DOY/GatherDir", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@DOY/PruneCruft", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@DOY/ManifestSkip", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@DOY/MetaYAML", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@DOY/License", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@DOY/Readme", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@DOY/ExtraTests", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@DOY/ExecDir", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@DOY/ShareDir", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::MakeMaker", + "name" : "@DOY/MakeMaker", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@DOY/Manifest", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::TestRelease", + "name" : "@DOY/TestRelease", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@DOY/ConfirmRelease", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@DOY/MetaConfig", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@DOY/MetaJSON", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::NextRelease", + "name" : "@DOY/NextRelease", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::CheckChangesHasContent", + "name" : "@DOY/CheckChangesHasContent", + "version" : "0.003" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@DOY/PkgVersion", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::PodCoverageTests", + "name" : "@DOY/PodCoverageTests", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@DOY/PodSyntaxTests", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::NoTabsTests", + "name" : "@DOY/NoTabsTests", + "version" : "0.01" + }, + { + "class" : "Dist::Zilla::Plugin::EOLTests", + "name" : "@DOY/EOLTests", + "version" : "0.02" + }, + { + "class" : "Dist::Zilla::Plugin::CompileTests", + "name" : "@DOY/CompileTests", + "version" : "1.101800" + }, + { + "class" : "Dist::Zilla::Plugin::Repository", + "name" : "@DOY/Repository", + "version" : "0.13" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Check", + "name" : "@DOY/Git::Check", + "version" : "1.103520" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Tag", + "name" : "@DOY/Git::Tag", + "version" : "1.103520" + }, + { + "class" : "Dist::Zilla::Plugin::BumpVersionFromGit", + "name" : "@DOY/BumpVersionFromGit", + "version" : "0.007" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@DOY/PodWeaver", + "version" : "3.101640" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@DOY/UploadToCPAN", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "runtime", + "type" : "requires" + } + }, + "name" : "Prereqs", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "TestRequires", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "4.200000" + } + ], + "zilla" : { + "class" : "Dist::Zilla::Dist::Builder", + "config" : { + "is_trial" : 0 + }, + "version" : "4.200000" + } + } + }, + "name" : "Dist::CheckConflicts", + "pathname" : "D/DO/DOY/Dist-CheckConflicts-0.02.tar.gz", + "provides" : { + "Dist::CheckConflicts" : { + "file" : "Dist/CheckConflicts.pm", + "version" : "0.02" + } + }, + "version" : "0.02" + }, + "Distribution::Guess::BuildSystem" : { + "dist" : "Distribution-Guess-BuildSystem-0.12", + "module" : "Distribution::Guess::BuildSystem", + "mymeta" : { + "abstract" : "This is what the module does", + "author" : [ + "brian d foy <bdfoy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.55_02, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Distribution-Guess-BuildSystem", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : 0, + "Test::Output" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.55" + } + }, + "runtime" : { + "requires" : { + "Module::Extract::Use" : 0, + "Module::Extract::VERSION" : 0, + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.12" + }, + "name" : "Distribution::Guess::BuildSystem", + "pathname" : "/authors/id/B/BD/BDFOY/Distribution-Guess-BuildSystem-0.12.tar.gz", + "provides" : { + "Distribution::Guess::BuildSystem" : { + "file" : "Distribution/Guess/BuildSystem.pm", + "version" : "0.12" + } + }, + "version" : "0.12" + }, + "Email::Address" : { + "dist" : "Email-Address-1.892", + "module" : "Email::Address", + "mymeta" : { + "abstract" : "RFC 2822 Address Parsing", + "author" : [ + "Casey West <casey@geeknest.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Email-Address", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : "0.47" + } + } + }, + "release_status" : "stable", + "version" : "1.892" + }, + "name" : "Email::Address", + "pathname" : "R/RJ/RJBS/Email-Address-1.892.tar.gz", + "provides" : { + "Email::Address" : { + "file" : "Email/Address.pm", + "version" : "1.892" + } + }, + "version" : "1.892" + }, + "Email::Date::Format" : { + "dist" : "Email-Date-Format-1.002", + "module" : "Email::Date::Format", + "mymeta" : { + "abstract" : "produce RFC 8822 date strings", + "author" : [ + "Ricardo SIGNES <rjbs@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.36_01, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Email-Date-Format", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : "0.47", + "Time::Local" : 0 + } + } + }, + "release_status" : "stable", + "version" : "1.002" + }, + "name" : "Email::Date::Format", + "pathname" : "R/RJ/RJBS/Email-Date-Format-1.002.tar.gz", + "provides" : { + "Email::Date::Format" : { + "file" : "Email/Date/Format.pm", + "version" : "1.002" + } + }, + "version" : "1.002" + }, + "Email::Send" : { + "dist" : "Email-Send-2.198", + "module" : "Email::Send", + "mymeta" : { + "abstract" : "Simply Sending Email", + "author" : [ + "Casey West <casey@geeknest.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.50, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Email-Send", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Email::Address" : "1.80", + "Email::Simple" : "1.92", + "File::Spec" : 0, + "Module::Pluggable" : "2.97", + "Return::Value" : "1.28", + "Scalar::Util" : "1.02", + "Symbol" : 0, + "Test::More" : "0.47" + } + } + }, + "release_status" : "stable", + "version" : "2.198" + }, + "name" : "Email::Send", + "pathname" : "R/RJ/RJBS/Email-Send-2.198.tar.gz", + "provides" : { + "Email::Send" : { + "file" : "Email/Send.pm", + "version" : "2.198" + }, + "Email::Send::NNTP" : { + "file" : "Email/Send/NNTP.pm", + "version" : "2.198" + }, + "Email::Send::Qmail" : { + "file" : "Email/Send/Qmail.pm", + "version" : "2.198" + }, + "Email::Send::SMTP" : { + "file" : "Email/Send/SMTP.pm", + "version" : "2.198" + }, + "Email::Send::Sendmail" : { + "file" : "Email/Send/Sendmail.pm", + "version" : "2.198" + }, + "Email::Send::Test" : { + "file" : "Email/Send/Test.pm", + "version" : "2.198" + } + }, + "version" : "2.198" + }, + "Email::Simple" : { + "dist" : "Email-Simple-2.100", + "module" : "Email::Simple", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.55_02, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Email-Simple", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Email::Date::Format" : 0, + "Test::More" : "0.47" + } + } + }, + "release_status" : "stable", + "resources" : { + "x_Repository" : "http://github.com/rjbs/email-simple" + }, + "version" : "2.100" + }, + "name" : "Email::Simple", + "pathname" : "R/RJ/RJBS/Email-Simple-2.100.tar.gz", + "provides" : { + "Email::Simple" : { + "file" : "Email/Simple.pm", + "version" : "2.100" + }, + "Email::Simple::Creator" : { + "file" : "Email/Simple/Creator.pm", + "version" : "2.100" + }, + "Email::Simple::Header" : { + "file" : "Email/Simple/Header.pm", + "version" : "2.005" + } + }, + "version" : "2.100" + }, + "Email::Valid" : { + "dist" : "Email-Valid-0.185", + "module" : "Email::Valid", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.59, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Email-Valid", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Mail::Address" : 0, + "Test::More" : 0, + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/rjbs/email-valid" + } + }, + "version" : "0.185" + }, + "name" : "Email::Valid", + "pathname" : "R/RJ/RJBS/Email-Valid-0.185.tar.gz", + "provides" : { + "Email::Valid" : { + "file" : "Email/Valid.pm", + "version" : "0.185" + } + }, + "version" : "0.185" + }, + "Encode::Locale" : { + "dist" : "Encode-Locale-1.02", + "module" : "Encode::Locale", + "mymeta" : { + "abstract" : "Determine the locale encoding", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Encode-Locale", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Test" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "recommends" : { + "I18N::Langinfo" : 0, + "Win32::Console" : 0 + }, + "requires" : { + "Encode" : "2", + "Encode::Alias" : 0, + "perl" : "5.008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/encode-locale" + } + }, + "version" : "1.02" + }, + "name" : "Encode::Locale", + "pathname" : "G/GA/GAAS/Encode-Locale-1.02.tar.gz", + "provides" : { + "Encode::Locale" : { + "file" : "Encode/Locale.pm", + "version" : "1.02" + } + }, + "version" : "1.02" + }, + "Eval::Closure" : { + "dist" : "Eval-Closure-0.06", + "module" : "Eval::Closure", + "mymeta" : { + "abstract" : "safely and cleanly create closures via string eval", + "author" : [ + "Jesse Luehrs <doy at tozt dot net>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.200006, CPAN::Meta::Converter version 2.110440, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Eval-Closure", + "prereqs" : { + "build" : { + "requires" : { + "Test::Fatal" : 0, + "Test::More" : "0.88", + "Test::Requires" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.30" + } + }, + "runtime" : { + "recommends" : { + "Perl::Tidy" : 0 + }, + "requires" : { + "Scalar::Util" : 0, + "Sub::Exporter" : 0, + "Try::Tiny" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "type" : "git", + "url" : "git://github.com/doy/eval-closure.git" + } + }, + "version" : "0.06", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "@DOY/TestMoreDoneTesting", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@DOY/GatherDir", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@DOY/PruneCruft", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@DOY/ManifestSkip", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@DOY/MetaYAML", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@DOY/License", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@DOY/Readme", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@DOY/ExtraTests", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@DOY/ExecDir", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@DOY/ShareDir", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::MakeMaker", + "name" : "@DOY/MakeMaker", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@DOY/Manifest", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::TestRelease", + "name" : "@DOY/TestRelease", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@DOY/ConfirmRelease", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@DOY/MetaConfig", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@DOY/MetaJSON", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::NextRelease", + "name" : "@DOY/NextRelease", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::CheckChangesHasContent", + "name" : "@DOY/CheckChangesHasContent", + "version" : "0.003" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@DOY/PkgVersion", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::PodCoverageTests", + "name" : "@DOY/PodCoverageTests", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@DOY/PodSyntaxTests", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::NoTabsTests", + "name" : "@DOY/NoTabsTests", + "version" : "0.01" + }, + { + "class" : "Dist::Zilla::Plugin::EOLTests", + "name" : "@DOY/EOLTests", + "version" : "0.02" + }, + { + "class" : "Dist::Zilla::Plugin::CompileTests", + "name" : "@DOY/CompileTests", + "version" : "1.110930" + }, + { + "class" : "Dist::Zilla::Plugin::Repository", + "name" : "@DOY/Repository", + "version" : "0.18" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Check", + "name" : "@DOY/Git::Check", + "version" : "1.110500" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Tag", + "name" : "@DOY/Git::Tag", + "version" : "1.110500" + }, + { + "class" : "Dist::Zilla::Plugin::Git::NextVersion", + "name" : "@DOY/Git::NextVersion", + "version" : "1.110500" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@DOY/PodWeaver", + "version" : "3.101641" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@DOY/UploadToCPAN", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "runtime", + "type" : "requires" + } + }, + "name" : "Prereqs", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "TestRequires", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "runtime", + "type" : "recommends" + } + }, + "name" : "RuntimeRecommends", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":IncModules", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "4.200006" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":MainModule", + "version" : "4.200006" + } + ], + "zilla" : { + "class" : "Dist::Zilla::Dist::Builder", + "config" : { + "is_trial" : 0 + }, + "version" : "4.200006" + } + } + }, + "name" : "Eval::Closure", + "pathname" : "D/DO/DOY/Eval-Closure-0.06.tar.gz", + "provides" : { + "Eval::Closure" : { + "file" : "Eval/Closure.pm", + "version" : "0.06" + } + }, + "version" : "0.06" + }, + "Exception::Class" : { + "dist" : "Exception-Class-1.32", + "module" : "Exception::Class", + "mymeta" : { + "abstract" : "A module that allows you to declare real exception classes in Perl", + "author" : [ + "Dave Rolsky <autarch@urth.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.101740, CPAN::Meta::Converter version 2.101670, CPAN::Meta::Converter version 2.112150", + "license" : [ + "artistic_2" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Exception-Class", + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.31" + } + }, + "runtime" : { + "requires" : { + "Class::Data::Inheritable" : "0.02", + "Devel::StackTrace" : "1.20", + "Scalar::Util" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Exception-Class" + }, + "repository" : { + "url" : "http://hg.urth.org/hg/Exception-Class" + } + }, + "version" : "1.32" + }, + "name" : "Exception::Class", + "pathname" : "D/DR/DROLSKY/Exception-Class-1.32.tar.gz", + "provides" : { + "Exception::Class" : { + "file" : "Exception/Class.pm", + "version" : "1.32" + }, + "Exception::Class::Base" : { + "file" : "Exception/Class/Base.pm", + "version" : "1.32" + } + }, + "version" : "1.32" + }, + "ExtUtils::MakeMaker" : { + "dist" : "ExtUtils-MakeMaker-6.62", + "module" : "ExtUtils::MakeMaker", + "mymeta" : { + "abstract" : "Create a module Makefile", + "author" : [ + "Michael G Schwern <schwern@pobox.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "ExtUtils-MakeMaker", + "no_index" : { + "directory" : [ + "t", + "inc", + "bundled", + "my" + ], + "package" : [ + "DynaLoader", + "in" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Data::Dumper" : 0 + } + }, + "configure" : { + "requires" : {} + }, + "runtime" : { + "requires" : { + "DirHandle" : 0, + "File::Basename" : 0, + "File::Spec" : "0.8", + "Pod::Man" : 0, + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker" + }, + "homepage" : "http://makemaker.org", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker" + }, + "x_MailingList" : "makemaker@perl.org" + }, + "version" : "6.62" + }, + "name" : "ExtUtils::MakeMaker", + "pathname" : "M/MS/MSCHWERN/ExtUtils-MakeMaker-6.62.tar.gz", + "provides" : { + "DynaLoader" : { + "file" : "ExtUtils/Mkbootstrap.pm" + }, + "ExtUtils::Command::MM" : { + "file" : "ExtUtils/Command/MM.pm", + "version" : "6.62" + }, + "ExtUtils::Liblist" : { + "file" : "ExtUtils/Liblist.pm", + "version" : "6.62" + }, + "ExtUtils::Liblist::Kid" : { + "file" : "ExtUtils/Liblist/Kid.pm", + "version" : "6.62" + }, + "ExtUtils::MM" : { + "file" : "ExtUtils/MM.pm", + "version" : "6.62" + }, + "ExtUtils::MM_AIX" : { + "file" : "ExtUtils/MM_AIX.pm", + "version" : "6.62" + }, + "ExtUtils::MM_Any" : { + "file" : "ExtUtils/MM_Any.pm", + "version" : "6.62" + }, + "ExtUtils::MM_BeOS" : { + "file" : "ExtUtils/MM_BeOS.pm", + "version" : "6.62" + }, + "ExtUtils::MM_Cygwin" : { + "file" : "ExtUtils/MM_Cygwin.pm", + "version" : "6.62" + }, + "ExtUtils::MM_DOS" : { + "file" : "ExtUtils/MM_DOS.pm", + "version" : "6.62" + }, + "ExtUtils::MM_Darwin" : { + "file" : "ExtUtils/MM_Darwin.pm", + "version" : "6.62" + }, + "ExtUtils::MM_MacOS" : { + "file" : "ExtUtils/MM_MacOS.pm", + "version" : "6.62" + }, + "ExtUtils::MM_NW5" : { + "file" : "ExtUtils/MM_NW5.pm", + "version" : "6.62" + }, + "ExtUtils::MM_OS2" : { + "file" : "ExtUtils/MM_OS2.pm", + "version" : "6.62" + }, + "ExtUtils::MM_QNX" : { + "file" : "ExtUtils/MM_QNX.pm", + "version" : "6.62" + }, + "ExtUtils::MM_UWIN" : { + "file" : "ExtUtils/MM_UWIN.pm", + "version" : "6.62" + }, + "ExtUtils::MM_Unix" : { + "file" : "ExtUtils/MM_Unix.pm", + "version" : "6.62" + }, + "ExtUtils::MM_VMS" : { + "file" : "ExtUtils/MM_VMS.pm", + "version" : "6.62" + }, + "ExtUtils::MM_VOS" : { + "file" : "ExtUtils/MM_VOS.pm", + "version" : "6.62" + }, + "ExtUtils::MM_Win32" : { + "file" : "ExtUtils/MM_Win32.pm", + "version" : "6.62" + }, + "ExtUtils::MM_Win95" : { + "file" : "ExtUtils/MM_Win95.pm", + "version" : "6.62" + }, + "ExtUtils::MY" : { + "file" : "ExtUtils/MY.pm", + "version" : "6.62" + }, + "ExtUtils::MakeMaker" : { + "file" : "ExtUtils/MakeMaker.pm", + "version" : "6.62" + }, + "ExtUtils::MakeMaker::Config" : { + "file" : "ExtUtils/MakeMaker/Config.pm", + "version" : "6.62" + }, + "ExtUtils::Mkbootstrap" : { + "file" : "ExtUtils/Mkbootstrap.pm", + "version" : "6.62" + }, + "ExtUtils::Mksymlists" : { + "file" : "ExtUtils/Mksymlists.pm", + "version" : "6.62" + }, + "ExtUtils::testlib" : { + "file" : "ExtUtils/testlib.pm", + "version" : "6.62" + }, + "MM" : { + "file" : "ExtUtils/MM.pm" + }, + "MY" : { + "file" : "ExtUtils/MakeMaker.pm" + } + }, + "version" : "6.62" + }, + "FCGI" : { + "dist" : "FCGI-0.74", + "module" : "FCGI", + "mymeta" : { + "abstract" : "Fast CGI module", + "author" : [ + "Sven Verdoolaege (skimo@kotnet.org)" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.59, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "FCGI", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "type" : "git", + "url" : "git://git.shadowcat.co.uk/catagits/fcgi2.git" + } + }, + "version" : "0.74" + }, + "name" : "FCGI", + "pathname" : "F/FL/FLORA/FCGI-0.74.tar.gz", + "provides" : { + "FCGI" : { + "file" : "FCGI.pm", + "version" : "0.74" + }, + "FCGI::Stream" : { + "file" : "FCGI.pm" + } + }, + "version" : "0.74" + }, + "File::Find::Closures" : { + "dist" : "File-Find-Closures-1.09", + "module" : "File::Find::Closures", + "mymeta" : { + "abstract" : "functions you can use with File::Find", + "author" : [ + "brian d foy <bdfoy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.44, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "File-Find-Closures", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "File::Find" : 0 + } + } + }, + "release_status" : "stable", + "version" : "1.09" + }, + "name" : "File::Find::Closures", + "pathname" : "/authors/id/B/BD/BDFOY/File-Find-Closures-1.09.tar.gz", + "provides" : { + "File::Find::Closures" : { + "file" : "File/Find/Closures.pm", + "version" : "1.09" + } + }, + "version" : "1.09" + }, + "File::Find::Rule" : { + "dist" : "File-Find-Rule-0.33", + "module" : "File::Find::Rule", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.57_05, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "File-Find-Rule", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "File::Find" : 0, + "File::Spec" : 0, + "Number::Compare" : 0, + "Test::More" : 0, + "Text::Glob" : "0.07" + } + } + }, + "release_status" : "stable", + "version" : "0.33" + }, + "name" : "File::Find::Rule", + "pathname" : "R/RC/RCLAMP/File-Find-Rule-0.33.tar.gz", + "provides" : { + "File::Find::Rule" : { + "file" : "File/Find/Rule.pm", + "version" : "0.33" + } + }, + "version" : "0.33" + }, + "File::Listing" : { + "dist" : "File-Listing-6.03", + "module" : "File::Listing", + "mymeta" : { + "abstract" : "parse directory listing", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.57_05, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "File-Listing", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "HTTP::Date" : "6", + "perl" : "5.008008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/libwww-perl/tree/File-Listing/master" + }, + "x_MailingList" : "mailto:libwww@perl.org" + }, + "version" : "6.03" + }, + "name" : "File::Listing", + "pathname" : "G/GA/GAAS/File-Listing-6.03.tar.gz", + "provides" : { + "File::Listing" : { + "file" : "File/Listing.pm", + "version" : "6.03" + }, + "File::Listing::apache" : { + "file" : "File/Listing.pm" + }, + "File::Listing::dosftp" : { + "file" : "File/Listing.pm" + }, + "File::Listing::netware" : { + "file" : "File/Listing.pm" + }, + "File::Listing::unix" : { + "file" : "File/Listing.pm" + }, + "File::Listing::vms" : { + "file" : "File/Listing.pm" + } + }, + "version" : "6.03" + }, + "File::Remove" : { + "dist" : "File-Remove-1.48", + "module" : "File::Remove", + "mymeta" : { + "abstract" : "Remove files and directories", + "author" : [ + "Adam Kennedy <adamk@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "File-Remove", + "no_index" : { + "directory" : [ + "inc", + "t", + "xt" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::More" : "0.42" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Cwd" : "3.2701", + "File::Spec" : "3.2701", + "perl" : "5.00503" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://svn.ali.as/cpan/trunk/File-Remove" + }, + "x_ChangeLog" : "http://fisheye2.atlassian.com/changelog/cpan/trunk/File-Remove" + }, + "version" : "1.48", + "x_module_name" : "File::Remove" + }, + "name" : "File::Remove", + "pathname" : "/authors/id/A/AD/ADAMK/File-Remove-1.48.tar.gz", + "provides" : { + "File::Remove" : { + "file" : "File/Remove.pm", + "version" : "1.48" + } + }, + "version" : "1.48" + }, + "File::Slurp" : { + "dist" : "File-Slurp-9999.19", + "module" : "File::Slurp", + "mymeta" : { + "abstract" : "Simple and Efficient Reading/Writing/Modifying of Complete Files", + "author" : [ + "Uri Guttman <uri@stemsystems.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.42, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "File-Slurp", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Exporter" : 0, + "Fcntl" : 0, + "POSIX" : 0 + } + } + }, + "release_status" : "stable", + "version" : "9999.19" + }, + "name" : "File::Slurp", + "pathname" : "U/UR/URI/File-Slurp-9999.19.tar.gz", + "provides" : { + "File::Slurp" : { + "file" : "File/Slurp.pm", + "version" : "9999.19" + } + }, + "version" : "9999.19" + }, + "Geography::NationalGrid" : { + "dist" : "Geography-NationalGrid-1.6", + "module" : "Geography::NationalGrid", + "mymeta" : { + "abstract" : "Convert national grid references to/from lat/long", + "author" : [ + "P Kent (pause@selsyn.co.uk)" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Geography-NationalGrid", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "1.6" + }, + "name" : "Geography::NationalGrid", + "pathname" : "http:/backpan.perl.org/authors/id/P/PK/PKENT/Geography-NationalGrid-1.6.tar.gz", + "provides" : { + "Geography::NationalGrid" : { + "file" : "Geography/NationalGrid.pm", + "version" : "1.6" + }, + "Geography::NationalGrid::GB" : { + "file" : "Geography/NationalGrid/GB.pm", + "version" : "1.3" + }, + "Geography::NationalGrid::IE" : { + "file" : "Geography/NationalGrid/IE.pm", + "version" : "1.2" + } + }, + "version" : "1.6" + }, + "Getopt::Long::Descriptive" : { + "dist" : "Getopt-Long-Descriptive-0.090", + "module" : "Getopt::Long::Descriptive", + "mymeta" : { + "abstract" : "Getopt::Long, but simpler and more powerful", + "author" : [ + "Hans Dieter Pearcey <hdp@cpan.org>", + "Ricardo Signes <rjbs@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.200005, CPAN::Meta::Converter version 2.110930, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Getopt-Long-Descriptive", + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : "0.96" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.31" + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "File::Basename" : 0, + "Getopt::Long" : "2.33", + "List::Util" : 0, + "Params::Validate" : "0.97", + "Scalar::Util" : 0, + "Sub::Exporter" : "0.972", + "Sub::Exporter::Util" : 0, + "overload" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "type" : "git", + "url" : "git://git.codesimply.com/Getopt-Long-Descriptive.git" + } + }, + "version" : "0.090", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::CheckPrereqsIndexed", + "name" : "@RJBS/CheckPrereqsIndexed", + "version" : "0.002" + }, + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@RJBS/@Basic/GatherDir", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@RJBS/@Basic/PruneCruft", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@RJBS/@Basic/ManifestSkip", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@RJBS/@Basic/MetaYAML", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@RJBS/@Basic/License", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@RJBS/@Basic/Readme", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@RJBS/@Basic/ExtraTests", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@RJBS/@Basic/ExecDir", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@RJBS/@Basic/ShareDir", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::MakeMaker", + "name" : "@RJBS/@Basic/MakeMaker", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@RJBS/@Basic/Manifest", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::TestRelease", + "name" : "@RJBS/@Basic/TestRelease", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@RJBS/@Basic/ConfirmRelease", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@RJBS/@Basic/UploadToCPAN", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::AutoPrereqs", + "name" : "@RJBS/AutoPrereqs", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::Git::NextVersion", + "name" : "@RJBS/Git::NextVersion", + "version" : "1.110500" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@RJBS/PkgVersion", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@RJBS/MetaConfig", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@RJBS/MetaJSON", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::NextRelease", + "name" : "@RJBS/NextRelease", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@RJBS/PodSyntaxTests", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::Repository", + "name" : "@RJBS/Repository", + "version" : "0.17" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "@RJBS/TestMoreWithSubtests", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@RJBS/PodWeaver", + "version" : "3.101641" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Check", + "name" : "@RJBS/@Git/Check", + "version" : "1.110500" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Commit", + "name" : "@RJBS/@Git/Commit", + "version" : "1.110500" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Tag", + "name" : "@RJBS/@Git/Tag", + "version" : "1.110500" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Push", + "name" : "@RJBS/@Git/Push", + "version" : "1.110500" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "4.200005" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "4.200005" + } + ], + "zilla" : { + "class" : "Dist::Zilla::Dist::Builder", + "config" : { + "is_trial" : 0 + }, + "version" : "4.200005" + } + } + }, + "name" : "Getopt::Long::Descriptive", + "pathname" : "R/RJ/RJBS/Getopt-Long-Descriptive-0.090.tar.gz", + "provides" : { + "Getopt::Long::Descriptive" : { + "file" : "Getopt/Long/Descriptive.pm", + "version" : "0.090" + }, + "Getopt::Long::Descriptive::Opts" : { + "file" : "Getopt/Long/Descriptive/Opts.pm", + "version" : "0.090" + }, + "Getopt::Long::Descriptive::Usage" : { + "file" : "Getopt/Long/Descriptive/Usage.pm", + "version" : "0.090" + } + }, + "version" : "0.090" + }, + "HTML::Form" : { + "dist" : "HTML-Form-6.00", + "module" : "HTML::Form", + "mymeta" : { + "abstract" : "Class that represents an HTML form element", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTML-Form", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Encode" : "2", + "HTML::TokeParser" : 0, + "HTTP::Request" : "6", + "HTTP::Request::Common" : "6", + "URI" : "1.10", + "perl" : "5.008008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/libwww-perl" + }, + "x_MailingList" : "mailto:libwww@perl.org" + }, + "version" : "6.00" + }, + "name" : "HTML::Form", + "pathname" : "G/GA/GAAS/HTML-Form-6.00.tar.gz", + "provides" : { + "HTML::Form" : { + "file" : "HTML/Form.pm", + "version" : "6.00" + }, + "HTML::Form::FileInput" : { + "file" : "HTML/Form.pm" + }, + "HTML::Form::IgnoreInput" : { + "file" : "HTML/Form.pm" + }, + "HTML::Form::ImageInput" : { + "file" : "HTML/Form.pm" + }, + "HTML::Form::Input" : { + "file" : "HTML/Form.pm" + }, + "HTML::Form::KeygenInput" : { + "file" : "HTML/Form.pm" + }, + "HTML::Form::ListInput" : { + "file" : "HTML/Form.pm" + }, + "HTML::Form::SubmitInput" : { + "file" : "HTML/Form.pm" + }, + "HTML::Form::TextInput" : { + "file" : "HTML/Form.pm" + } + }, + "version" : "6.00" + }, + "HTML::Parser" : { + "dist" : "HTML-Parser-3.69", + "module" : "HTML::Parser", + "mymeta" : { + "abstract" : "HTML parser class", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.57_05, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTML-Parser", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "recommends" : { + "HTTP::Headers" : 0 + }, + "requires" : { + "HTML::Tagset" : "3", + "XSLoader" : 0, + "perl" : "5.008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/html-parser" + }, + "x_MailingList" : "mailto:libwww@perl.org" + }, + "version" : "3.69" + }, + "name" : "HTML::Parser", + "pathname" : "G/GA/GAAS/HTML-Parser-3.69.tar.gz", + "provides" : { + "HTML::Entities" : { + "file" : "HTML/Entities.pm", + "version" : "3.69" + }, + "HTML::Filter" : { + "file" : "HTML/Filter.pm", + "version" : "3.57" + }, + "HTML::HeadParser" : { + "file" : "HTML/HeadParser.pm", + "version" : "3.69" + }, + "HTML::LinkExtor" : { + "file" : "HTML/LinkExtor.pm", + "version" : "3.69" + }, + "HTML::Parser" : { + "file" : "HTML/Parser.pm", + "version" : "3.69" + }, + "HTML::PullParser" : { + "file" : "HTML/PullParser.pm", + "version" : "3.57" + }, + "HTML::TokeParser" : { + "file" : "HTML/TokeParser.pm", + "version" : "3.69" + } + }, + "version" : "3.69" + }, + "HTML::Selector::XPath" : { + "dist" : "HTML-Selector-XPath-0.12", + "module" : "HTML::Selector::XPath", + "mymeta" : { + "abstract" : "CSS Selector to XPath compiler", + "author" : [ + "Tatsuhiko Miyagawa <miyagawa@bulknews.net>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.81, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTML-Selector-XPath", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.50" + } + }, + "runtime" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.62", + "Test::Base" : 0, + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.12" + }, + "name" : "HTML::Selector::XPath", + "pathname" : "C/CO/CORION/HTML-Selector-XPath-0.12.tar.gz", + "provides" : { + "HTML::Selector::XPath" : { + "file" : "HTML/Selector/XPath.pm", + "version" : "0.12" + } + }, + "version" : "0.12" + }, + "HTML::Tagset" : { + "dist" : "HTML-Tagset-3.20", + "module" : "HTML::Tagset", + "mymeta" : { + "abstract" : "data tables useful in parsing HTML", + "author" : [ + "Andy Lester <andy@petdance.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.42, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTML-Tagset", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "3.20" + }, + "name" : "HTML::Tagset", + "pathname" : "P/PE/PETDANCE/HTML-Tagset-3.20.tar.gz", + "provides" : { + "HTML::Tagset" : { + "file" : "HTML/Tagset.pm", + "version" : "3.20" + } + }, + "version" : "3.20" + }, + "HTML::Tree" : { + "dist" : "HTML-Tree-4.2", + "module" : "HTML::TreeBuilder", + "mymeta" : { + "abstract" : "Class for objects that represent HTML elements", + "author" : [ + "Jeff Fearn <jfearn@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTML-Tree", + "prereqs" : { + "build" : { + "requires" : { + "HTML::Parser" : "3.46", + "HTML::Tagset" : "3.02", + "Module::Build" : 0, + "Test::Exception" : 0, + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "Module::Build" : "0.36" + } + }, + "runtime" : { + "requires" : { + "HTML::Parser" : "3.46", + "HTML::Tagset" : "3.02", + "perl" : "v5.8.0" + } + } + }, + "provides" : { + "HTML::AsSubs" : { + "file" : "lib/HTML/AsSubs.pm", + "version" : "4.2" + }, + "HTML::Element" : { + "file" : "lib/HTML/Element.pm", + "version" : "4.2" + }, + "HTML::Element::traverse" : { + "file" : "lib/HTML/Element/traverse.pm", + "version" : "4.2" + }, + "HTML::Parse" : { + "file" : "lib/HTML/Parse.pm", + "version" : "4.2" + }, + "HTML::Tree" : { + "file" : "lib/HTML/Tree.pm", + "version" : "4.2" + }, + "HTML::TreeBuilder" : { + "file" : "lib/HTML/TreeBuilder.pm", + "version" : "4.2" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "4.2" + }, + "name" : "HTML::Tree", + "pathname" : "J/JF/JFEARN/HTML-Tree-4.2.tar.gz", + "provides" : { + "HTML::AsSubs" : { + "file" : "HTML/AsSubs.pm", + "version" : "4.2" + }, + "HTML::Element" : { + "file" : "HTML/Element.pm", + "version" : "4.2" + }, + "HTML::Element::traverse" : { + "file" : "HTML/Element/traverse.pm", + "version" : "4.2" + }, + "HTML::Parse" : { + "file" : "HTML/Parse.pm", + "version" : "4.2" + }, + "HTML::Tree" : { + "file" : "HTML/Tree.pm", + "version" : "4.2" + }, + "HTML::TreeBuilder" : { + "file" : "HTML/TreeBuilder.pm", + "version" : "4.2" + } + }, + "version" : "4.2" + }, + "HTML::TreeBuilder::XPath" : { + "dist" : "HTML-TreeBuilder-XPath-0.14", + "module" : "HTML::TreeBuilder::XPath", + "mymeta" : { + "abstract" : "add XPath support to HTML::TreeBuilder", + "author" : [ + "Michel Rodriguez <mrodrigu@localdomain>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.58, CPAN::Meta::Converter version 2.110930001, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTML-TreeBuilder-XPath", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "HTML::TreeBuilder" : 0, + "List::Util" : 0, + "XML::XPathEngine" : "0.12" + } + } + }, + "release_status" : "stable", + "version" : "0.14" + }, + "name" : "HTML::TreeBuilder::XPath", + "pathname" : "M/MI/MIROD/HTML-TreeBuilder-XPath-0.14.tar.gz", + "provides" : { + "HTML::Element" : { + "file" : "HTML/TreeBuilder/XPath.pm" + }, + "HTML::TreeBuilder::XPath" : { + "file" : "HTML/TreeBuilder/XPath.pm", + "version" : "0.14" + }, + "HTML::TreeBuilder::XPath::Attribute" : { + "file" : "HTML/TreeBuilder/XPath.pm" + }, + "HTML::TreeBuilder::XPath::Node" : { + "file" : "HTML/TreeBuilder/XPath.pm" + }, + "HTML::TreeBuilder::XPath::Root" : { + "file" : "HTML/TreeBuilder/XPath.pm" + }, + "HTML::TreeBuilder::XPath::TextNode" : { + "file" : "HTML/TreeBuilder/XPath.pm" + } + }, + "version" : "0.14" + }, + "HTTP::Body" : { + "dist" : "HTTP-Body-1.15", + "module" : "HTTP::Body", + "mymeta" : { + "abstract" : "HTTP Body Parser", + "author" : [ + "Christian Hansen, C<chansen@cpan.org>", + "Sebastian Riedel, C<sri@cpan.org>", + "Andy Grundman, C<andy@hybridized.org>", + "Torsten Raudssus, C<getty@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.300003, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTTP-Body", + "prereqs" : { + "build" : { + "requires" : { + "Test::Deep" : 0, + "Test::More" : "0.86" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.30" + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Digest::MD5" : 0, + "File::Temp" : "0.14", + "HTTP::Headers" : 0, + "IO::File" : "1.14" + } + } + }, + "release_status" : "stable", + "resources" : { + "X_mailing_list" : "http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst-dev", + "repository" : { + "url" : "https://dev.catalystframework.org/repos/Catalyst/trunk/HTTP-Body/" + } + }, + "version" : "1.15" + }, + "name" : "HTTP::Body", + "pathname" : "G/GE/GETTY/HTTP-Body-1.15.tar.gz", + "provides" : { + "HTTP::Body" : { + "file" : "HTTP/Body.pm", + "version" : "1.15" + }, + "HTTP::Body::MultiPart" : { + "file" : "HTTP/Body/MultiPart.pm", + "version" : "1.15" + }, + "HTTP::Body::OctetStream" : { + "file" : "HTTP/Body/OctetStream.pm", + "version" : "1.15" + }, + "HTTP::Body::UrlEncoded" : { + "file" : "HTTP/Body/UrlEncoded.pm", + "version" : "1.15" + }, + "HTTP::Body::XForms" : { + "file" : "HTTP/Body/XForms.pm", + "version" : "1.15" + }, + "HTTP::Body::XFormsMultipart" : { + "file" : "HTTP/Body/XFormsMultipart.pm", + "version" : "1.15" + } + }, + "version" : "1.15" + }, + "HTTP::Cookies" : { + "dist" : "HTTP-Cookies-6.00", + "module" : "HTTP::Cookies", + "mymeta" : { + "abstract" : "HTTP cookie jars", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTTP-Cookies", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "HTTP::Date" : "6", + "HTTP::Headers::Util" : "6", + "Time::Local" : 0, + "perl" : "5.008008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/libwww-perl" + }, + "x_MailingList" : "mailto:libwww@perl.org" + }, + "version" : "6.00" + }, + "name" : "HTTP::Cookies", + "pathname" : "G/GA/GAAS/HTTP-Cookies-6.00.tar.gz", + "provides" : { + "HTTP::Cookies" : { + "file" : "HTTP/Cookies.pm", + "version" : "6.00" + }, + "HTTP::Cookies::Microsoft" : { + "file" : "HTTP/Cookies/Microsoft.pm", + "version" : "6.00" + }, + "HTTP::Cookies::Netscape" : { + "file" : "HTTP/Cookies/Netscape.pm", + "version" : "6.00" + } + }, + "version" : "6.00" + }, + "HTTP::Daemon" : { + "dist" : "HTTP-Daemon-6.00", + "module" : "HTTP::Daemon", + "mymeta" : { + "abstract" : "a simple http server class", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTTP-Daemon", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "HTTP::Date" : "6", + "HTTP::Request" : "6", + "HTTP::Response" : "6", + "HTTP::Status" : "6", + "IO::Socket" : 0, + "LWP::MediaTypes" : "6", + "Sys::Hostname" : 0, + "perl" : "5.008008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/libwww-perl" + }, + "x_MailingList" : "mailto:libwww@perl.org" + }, + "version" : "6.00" + }, + "name" : "HTTP::Daemon", + "pathname" : "G/GA/GAAS/HTTP-Daemon-6.00.tar.gz", + "provides" : { + "HTTP::Daemon" : { + "file" : "HTTP/Daemon.pm", + "version" : "6.00" + }, + "HTTP::Daemon::ClientConn" : { + "file" : "HTTP/Daemon.pm" + } + }, + "version" : "6.00" + }, + "HTTP::Date" : { + "dist" : "HTTP-Date-6.00", + "module" : "HTTP::Date", + "mymeta" : { + "abstract" : "date conversion routines", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTTP-Date", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "recommends" : { + "Time::Zone" : 0 + }, + "requires" : { + "Time::Local" : 0, + "perl" : "5.008008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/libwww-perl" + }, + "x_MailingList" : "mailto:libwww@perl.org" + }, + "version" : "6.00" + }, + "name" : "HTTP::Date", + "pathname" : "G/GA/GAAS/HTTP-Date-6.00.tar.gz", + "provides" : { + "HTTP::Date" : { + "file" : "HTTP/Date.pm", + "version" : "6.00" + } + }, + "version" : "6.00" + }, + "HTTP::Message" : { + "dist" : "HTTP-Message-6.02", + "module" : "HTTP::Status", + "mymeta" : { + "abstract" : "HTTP style messages", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTTP-Message", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Compress::Raw::Zlib" : 0, + "Encode" : "2.12", + "Encode::Locale" : "1", + "HTML::Parser" : "3.33", + "HTTP::Date" : "6", + "IO::Compress::Bzip2" : "2.021", + "IO::Compress::Deflate" : 0, + "IO::Compress::Gzip" : 0, + "IO::Uncompress::Bunzip2" : "2.021", + "IO::Uncompress::Gunzip" : 0, + "IO::Uncompress::Inflate" : 0, + "IO::Uncompress::RawInflate" : 0, + "LWP::MediaTypes" : "6", + "MIME::Base64" : "2.1", + "MIME::QuotedPrint" : 0, + "URI" : "1.10", + "perl" : "5.008008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/libwww-perl/tree/HTTP-Message/master" + }, + "x_MailingList" : "mailto:libwww@perl.org" + }, + "version" : "6.02" + }, + "name" : "HTTP::Message", + "pathname" : "G/GA/GAAS/HTTP-Message-6.02.tar.gz", + "provides" : { + "HTTP::Config" : { + "file" : "HTTP/Config.pm", + "version" : "6.00" + }, + "HTTP::Headers" : { + "file" : "HTTP/Headers.pm", + "version" : "6.00" + }, + "HTTP::Headers::Auth" : { + "file" : "HTTP/Headers/Auth.pm", + "version" : "6.00" + }, + "HTTP::Headers::ETag" : { + "file" : "HTTP/Headers/ETag.pm", + "version" : "6.00" + }, + "HTTP::Headers::Util" : { + "file" : "HTTP/Headers/Util.pm", + "version" : "6.00" + }, + "HTTP::Message" : { + "file" : "HTTP/Message.pm", + "version" : "6.02" + }, + "HTTP::Request" : { + "file" : "HTTP/Request.pm", + "version" : "6.00" + }, + "HTTP::Request::Common" : { + "file" : "HTTP/Request/Common.pm", + "version" : "6.00" + }, + "HTTP::Response" : { + "file" : "HTTP/Response.pm", + "version" : "6.01" + }, + "HTTP::Status" : { + "file" : "HTTP/Status.pm", + "version" : "6.00" + } + }, + "version" : "6.00" + }, + "HTTP::Negotiate" : { + "dist" : "HTTP-Negotiate-6.00", + "module" : "HTTP::Negotiate", + "mymeta" : { + "abstract" : "choose a variant to serve", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTTP-Negotiate", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "HTTP::Headers" : "6", + "perl" : "5.008008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/libwww-perl" + }, + "x_MailingList" : "mailto:libwww@perl.org" + }, + "version" : "6.00" + }, + "name" : "HTTP::Negotiate", + "pathname" : "G/GA/GAAS/HTTP-Negotiate-6.00.tar.gz", + "provides" : { + "HTTP::Negotiate" : { + "file" : "HTTP/Negotiate.pm", + "version" : "6.00" + } + }, + "version" : "6.00" + }, + "HTTP::Request::AsCGI" : { + "dist" : "HTTP-Request-AsCGI-1.2", + "module" : "HTTP::Request::AsCGI", + "mymeta" : { + "abstract" : "Set up a CGI environment from an HTTP::Request", + "author" : [ + "Christian Hansen <ch@ngmedia.com>", + "Hans Dieter Pearcey <hdp@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 1.093400, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTTP-Request-AsCGI", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Class::Accessor" : 0, + "HTTP::Request" : 0, + "HTTP::Response" : "1.53", + "IO::File" : 0, + "Test::More" : 0, + "URI::Escape" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/HTTP-Request-AsCGI" + } + }, + "version" : "1.2" + }, + "name" : "HTTP::Request::AsCGI", + "pathname" : "F/FL/FLORA/HTTP-Request-AsCGI-1.2.tar.gz", + "provides" : { + "HTTP::Request::AsCGI" : { + "file" : "HTTP/Request/AsCGI.pm", + "version" : "1.2" + } + }, + "version" : "1.2" + }, + "HTTP::Server::Simple" : { + "dist" : "HTTP-Server-Simple-0.44", + "module" : "HTTP::Server::Simple", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "HTTP-Server-Simple", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "CGI" : 0, + "Socket" : 0, + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.44" + }, + "name" : "HTTP::Server::Simple", + "pathname" : "J/JE/JESSE/HTTP-Server-Simple-0.44.tar.gz", + "provides" : { + "HTTP::Server::Simple" : { + "file" : "HTTP/Server/Simple.pm", + "version" : "0.44" + }, + "HTTP::Server::Simple::CGI" : { + "file" : "HTTP/Server/Simple/CGI.pm", + "version" : "0" + }, + "HTTP::Server::Simple::CGI::Environment" : { + "file" : "HTTP/Server/Simple/CGI/Environment.pm", + "version" : "0" + } + }, + "version" : "0.44" + }, + "Hash::Merge" : { + "dist" : "Hash-Merge-0.12", + "module" : "Hash::Merge", + "mymeta" : { + "abstract" : "Merges arbitrarily deep hashes into a single hash", + "author" : [ + "Michael K. Neylon <mneylon-pm@masemware.com" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Hash-Merge", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Clone" : 0, + "Test::More" : "0.33" + } + } + }, + "release_status" : "stable", + "version" : "0.12" + }, + "name" : "Hash::Merge", + "pathname" : "D/DM/DMUEY/Hash-Merge-0.12.tar.gz", + "provides" : { + "Hash::Merge" : { + "file" : "Hash/Merge.pm", + "version" : "0.12" + } + }, + "version" : "0.12" + }, + "Hook::LexWrap" : { + "dist" : "Hook-LexWrap-0.24", + "module" : "Hook::LexWrap", + "mymeta" : { + "abstract" : "Lexically scoped subroutine wrappers", + "author" : [ + "Damian Conway (damian@conway.org)" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Hook-LexWrap", + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : 0 + } + }, + "runtime" : { + "requires" : { + "perl" : "5.006" + } + } + }, + "provides" : { + "Hook::LexWrap" : { + "file" : "lib/Hook/LexWrap.pm", + "version" : "0.24" + }, + "Hook::LexWrap::Cleanup" : { + "file" : "lib/Hook/LexWrap.pm", + "version" : 0 + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://github.com/chorny/Hook-LexWrap" + } + }, + "version" : "0.24" + }, + "name" : "Hook::LexWrap", + "pathname" : "/authors/id/C/CH/CHORNY/Hook-LexWrap-0.24.tar.gz", + "provides" : { + "Hook::LexWrap" : { + "file" : "Hook/LexWrap.pm", + "version" : "0.24" + }, + "Hook::LexWrap::Cleanup" : { + "file" : "Hook/LexWrap.pm" + } + }, + "version" : "0.24" + }, + "IO::String" : { + "dist" : "IO-String-1.08", + "module" : "IO::String", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "IO-String", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "1.08" + }, + "name" : "IO::String", + "pathname" : "G/GA/GAAS/IO-String-1.08.tar.gz", + "provides" : { + "IO::String" : { + "file" : "IO/String.pm", + "version" : "1.08" + } + }, + "version" : "1.08" + }, + "IO::Stringy" : { + "dist" : "IO-stringy-2.110", + "module" : "IO::Scalar", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "IO-stringy", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "2.110" + }, + "name" : "IO::Stringy", + "pathname" : "D/DS/DSKOLL/IO-stringy-2.110.tar.gz", + "provides" : { + "IO::AtomicFile" : { + "file" : "IO/AtomicFile.pm", + "version" : "2.110" + }, + "IO::InnerFile" : { + "file" : "IO/InnerFile.pm", + "version" : "2.110" + }, + "IO::Lines" : { + "file" : "IO/Lines.pm", + "version" : "2.110" + }, + "IO::Scalar" : { + "file" : "IO/Scalar.pm", + "version" : "2.110" + }, + "IO::ScalarArray" : { + "file" : "IO/ScalarArray.pm", + "version" : "2.110" + }, + "IO::Stringy" : { + "file" : "IO/Stringy.pm", + "version" : "2.110" + }, + "IO::Wrap" : { + "file" : "IO/Wrap.pm", + "version" : "2.110" + }, + "IO::WrapTie" : { + "file" : "IO/WrapTie.pm", + "version" : "2.110" + }, + "IO::WrapTie::Master" : { + "file" : "IO/WrapTie.pm" + }, + "IO::WrapTie::Slave" : { + "file" : "IO/WrapTie.pm" + } + }, + "version" : "2.110" + }, + "IPC::Run3" : { + "dist" : "IPC-Run3-0.044", + "module" : "IPC::Run3", + "mymeta" : { + "abstract" : "run a subprocess with input/ouput redirection", + "author" : [ + "Barrie Slaymaker <barries@slaysys.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "open_source" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "IPC-Run3", + "no_index" : { + "directory" : [ + "lib/IPC/Run3" + ], + "file" : [ + "bin/run3profpp" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : "0.31", + "Time::HiRes" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/rjbs/ipc-run3/" + } + }, + "version" : "0.044" + }, + "name" : "IPC::Run3", + "pathname" : "R/RJ/RJBS/IPC-Run3-0.044.tar.gz", + "provides" : { + "IPC::Run3" : { + "file" : "IPC/Run3.pm", + "version" : "0.044" + }, + "IPC::Run3::ProfArrayBuffer" : { + "file" : "IPC/Run3/ProfArrayBuffer.pm", + "version" : "0.044" + }, + "IPC::Run3::ProfLogReader" : { + "file" : "IPC/Run3/ProfLogReader.pm", + "version" : "0.044" + }, + "IPC::Run3::ProfLogger" : { + "file" : "IPC/Run3/ProfLogger.pm", + "version" : "0.044" + }, + "IPC::Run3::ProfPP" : { + "file" : "IPC/Run3/ProfPP.pm", + "version" : "0.044" + }, + "IPC::Run3::ProfReporter" : { + "file" : "IPC/Run3/ProfReporter.pm", + "version" : "0.044" + } + }, + "version" : "0.044" + }, + "Image::Size" : { + "dist" : "Image-Size-3.230", + "module" : "Image::Size", + "mymeta" : { + "abstract" : "A library to extract height/width from images", + "author" : [ + "Randy J. Ray <rjray@blackperl.com>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.3607, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Image-Size", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "Module::Build" : "0.36" + } + }, + "runtime" : { + "recommends" : { + "Compress::Zlib" : "2" + }, + "requires" : { + "File::Spec" : "0.8", + "Module::Build" : "0.28", + "Test::More" : "0.80" + } + } + }, + "provides" : { + "Image::Size" : { + "file" : "lib/Image/Size.pm", + "version" : "3.230" + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=Image-Size" + }, + "homepage" : "http://search.cpan.org/dist/Image-Size", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://github.com/rjray/image-size" + } + }, + "version" : "3.230" + }, + "name" : "Image::Size", + "pathname" : "R/RJ/RJRAY/Image-Size-3.230.tar.gz", + "provides" : { + "Image::Size" : { + "file" : "Image/Size.pm", + "version" : "3.230" + } + }, + "version" : "3.230" + }, + "LWP" : { + "dist" : "libwww-perl-6.03", + "module" : "LWP", + "mymeta" : { + "abstract" : "The World-Wide Web library for Perl", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.57_05, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "libwww-perl", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "recommends" : { + "Authen::NTLM" : "1.02", + "Data::Dump" : 0, + "LWP::Protocol::https" : "6.02" + }, + "requires" : { + "Digest::MD5" : 0, + "Encode" : "2.12", + "Encode::Locale" : 0, + "File::Listing" : "6", + "HTML::Entities" : 0, + "HTML::HeadParser" : 0, + "HTTP::Cookies" : "6", + "HTTP::Daemon" : "6", + "HTTP::Date" : "6", + "HTTP::Negotiate" : "6", + "HTTP::Request" : "6", + "HTTP::Request::Common" : "6", + "HTTP::Response" : "6", + "HTTP::Status" : "6", + "IO::Select" : 0, + "IO::Socket" : 0, + "LWP::MediaTypes" : "6", + "MIME::Base64" : "2.1", + "Net::FTP" : "2.58", + "Net::HTTP" : "6", + "URI" : "1.10", + "URI::Escape" : 0, + "WWW::RobotRules" : "6", + "perl" : "5.008008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/libwww-perl" + }, + "x_MailingList" : "mailto:libwww@perl.org" + }, + "version" : "6.03" + }, + "name" : "LWP", + "pathname" : "G/GA/GAAS/libwww-perl-6.03.tar.gz", + "provides" : { + "LWP" : { + "file" : "LWP.pm", + "version" : "6.03" + }, + "LWP::Authen::Basic" : { + "file" : "LWP/Authen/Basic.pm" + }, + "LWP::Authen::Digest" : { + "file" : "LWP/Authen/Digest.pm" + }, + "LWP::Authen::Ntlm" : { + "file" : "LWP/Authen/Ntlm.pm", + "version" : "6.00" + }, + "LWP::ConnCache" : { + "file" : "LWP/ConnCache.pm", + "version" : "6.02" + }, + "LWP::Debug" : { + "file" : "LWP/Debug.pm" + }, + "LWP::DebugFile" : { + "file" : "LWP/DebugFile.pm" + }, + "LWP::MemberMixin" : { + "file" : "LWP/MemberMixin.pm" + }, + "LWP::Protocol" : { + "file" : "LWP/Protocol.pm", + "version" : "6.00" + }, + "LWP::Protocol::GHTTP" : { + "file" : "LWP/Protocol/GHTTP.pm" + }, + "LWP::Protocol::MyFTP" : { + "file" : "LWP/Protocol/ftp.pm" + }, + "LWP::Protocol::cpan" : { + "file" : "LWP/Protocol/cpan.pm" + }, + "LWP::Protocol::data" : { + "file" : "LWP/Protocol/data.pm" + }, + "LWP::Protocol::file" : { + "file" : "LWP/Protocol/file.pm" + }, + "LWP::Protocol::ftp" : { + "file" : "LWP/Protocol/ftp.pm" + }, + "LWP::Protocol::gopher" : { + "file" : "LWP/Protocol/gopher.pm" + }, + "LWP::Protocol::http" : { + "file" : "LWP/Protocol/http.pm" + }, + "LWP::Protocol::http::Socket" : { + "file" : "LWP/Protocol/http.pm" + }, + "LWP::Protocol::http::SocketMethods" : { + "file" : "LWP/Protocol/http.pm" + }, + "LWP::Protocol::loopback" : { + "file" : "LWP/Protocol/loopback.pm" + }, + "LWP::Protocol::mailto" : { + "file" : "LWP/Protocol/mailto.pm" + }, + "LWP::Protocol::nntp" : { + "file" : "LWP/Protocol/nntp.pm" + }, + "LWP::Protocol::nogo" : { + "file" : "LWP/Protocol/nogo.pm" + }, + "LWP::RobotUA" : { + "file" : "LWP/RobotUA.pm", + "version" : "6.03" + }, + "LWP::Simple" : { + "file" : "LWP/Simple.pm", + "version" : "6.00" + }, + "LWP::UserAgent" : { + "file" : "LWP/UserAgent.pm", + "version" : "6.03" + } + }, + "version" : "6.03" + }, + "LWP::MediaTypes" : { + "dist" : "LWP-MediaTypes-6.01", + "module" : "LWP::MediaTypes", + "mymeta" : { + "abstract" : "guess media type for a file or a URL", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "LWP-MediaTypes", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "perl" : "5.008008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/libwww-perl" + }, + "x_MailingList" : "mailto:libwww@perl.org" + }, + "version" : "6.01" + }, + "name" : "LWP::MediaTypes", + "pathname" : "G/GA/GAAS/LWP-MediaTypes-6.01.tar.gz", + "provides" : { + "LWP::MediaTypes" : { + "file" : "LWP/MediaTypes.pm", + "version" : "6.01" + } + }, + "version" : "6.01" + }, + "List::MoreUtils" : { + "dist" : "List-MoreUtils-0.33", + "module" : "List::MoreUtils", + "mymeta" : { + "abstract" : "Provide the stuff missing in List::Util", + "author" : [ + "Tassilo von Parseval <tassilo.von.parseval@rwth-aachen.de>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "List-MoreUtils", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : "0.42" + } + }, + "configure" : { + "requires" : { + "ExtUtils::CBuilder" : "0.27", + "ExtUtils::MakeMaker" : "6.52" + } + }, + "runtime" : { + "requires" : { + "Test::More" : "0.82", + "perl" : "5.00503" + } + } + }, + "release_status" : "stable", + "version" : "0.33" + }, + "name" : "List::MoreUtils", + "pathname" : "A/AD/ADAMK/List-MoreUtils-0.33.tar.gz", + "provides" : { + "List::MoreUtils" : { + "file" : "List/MoreUtils.pm", + "version" : "0.33" + } + }, + "version" : "0.33" + }, + "Log::Log4perl" : { + "dist" : "Log-Log4perl-1.34", + "module" : "Log::Log4perl", + "mymeta" : { + "abstract" : "Log4j implementation for Perl", + "author" : [ + "Mike Schilli <m@perlmeister.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.55_02, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Log-Log4perl", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "File::Spec" : "0.82", + "Test::More" : "0.45" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/mschilli/log4perl" + }, + "x_MailingList" : "mailto:log4perl-devel@lists.sourceforge.net" + }, + "version" : "1.34" + }, + "name" : "Log::Log4perl", + "pathname" : "M/MS/MSCHILLI/Log-Log4perl-1.34.tar.gz", + "provides" : { + "Log::Log4perl" : { + "file" : "Log/Log4perl.pm", + "version" : "1.34" + }, + "Log::Log4perl::Appender" : { + "file" : "Log/Log4perl/Appender.pm" + }, + "Log::Log4perl::Appender::Buffer" : { + "file" : "Log/Log4perl/Appender/Buffer.pm", + "version" : "0" + }, + "Log::Log4perl::Appender::DBI" : { + "file" : "Log/Log4perl/Appender/DBI.pm" + }, + "Log::Log4perl::Appender::File" : { + "file" : "Log/Log4perl/Appender/File.pm" + }, + "Log::Log4perl::Appender::Limit" : { + "file" : "Log/Log4perl/Appender/Limit.pm", + "version" : "0" + }, + "Log::Log4perl::Appender::RRDs" : { + "file" : "Log/Log4perl/Appender/RRDs.pm" + }, + "Log::Log4perl::Appender::Screen" : { + "file" : "Log/Log4perl/Appender/Screen.pm" + }, + "Log::Log4perl::Appender::ScreenColoredLevels" : { + "file" : "Log/Log4perl/Appender/ScreenColoredLevels.pm" + }, + "Log::Log4perl::Appender::Socket" : { + "file" : "Log/Log4perl/Appender/Socket.pm" + }, + "Log::Log4perl::Appender::String" : { + "file" : "Log/Log4perl/Appender/String.pm" + }, + "Log::Log4perl::Appender::Synchronized" : { + "file" : "Log/Log4perl/Appender/Synchronized.pm", + "version" : "0" + }, + "Log::Log4perl::Appender::TestArrayBuffer" : { + "file" : "Log/Log4perl/Appender/TestArrayBuffer.pm" + }, + "Log::Log4perl::Appender::TestBuffer" : { + "file" : "Log/Log4perl/Appender/TestBuffer.pm" + }, + "Log::Log4perl::Appender::TestFileCreeper" : { + "file" : "Log/Log4perl/Appender/TestFileCreeper.pm" + }, + "Log::Log4perl::Catalyst" : { + "file" : "Log/Log4perl/Catalyst.pm", + "version" : "0" + }, + "Log::Log4perl::Config" : { + "file" : "Log/Log4perl/Config.pm" + }, + "Log::Log4perl::Config::BaseConfigurator" : { + "file" : "Log/Log4perl/Config/BaseConfigurator.pm" + }, + "Log::Log4perl::Config::DOMConfigurator" : { + "file" : "Log/Log4perl/Config/DOMConfigurator.pm", + "version" : "0.03" + }, + "Log::Log4perl::Config::PropertyConfigurator" : { + "file" : "Log/Log4perl/Config/PropertyConfigurator.pm" + }, + "Log::Log4perl::Config::Watch" : { + "file" : "Log/Log4perl/Config/Watch.pm" + }, + "Log::Log4perl::DateFormat" : { + "file" : "Log/Log4perl/DateFormat.pm" + }, + "Log::Log4perl::Filter" : { + "file" : "Log/Log4perl/Filter.pm" + }, + "Log::Log4perl::Filter::Boolean" : { + "file" : "Log/Log4perl/Filter/Boolean.pm" + }, + "Log::Log4perl::Filter::LevelMatch" : { + "file" : "Log/Log4perl/Filter/LevelMatch.pm" + }, + "Log::Log4perl::Filter::LevelRange" : { + "file" : "Log/Log4perl/Filter/LevelRange.pm" + }, + "Log::Log4perl::Filter::StringMatch" : { + "file" : "Log/Log4perl/Filter/StringMatch.pm" + }, + "Log::Log4perl::InternalDebug" : { + "file" : "Log/Log4perl/InternalDebug.pm" + }, + "Log::Log4perl::JavaMap" : { + "file" : "Log/Log4perl/JavaMap.pm" + }, + "Log::Log4perl::JavaMap::ConsoleAppender" : { + "file" : "Log/Log4perl/JavaMap/ConsoleAppender.pm" + }, + "Log::Log4perl::JavaMap::FileAppender" : { + "file" : "Log/Log4perl/JavaMap/FileAppender.pm" + }, + "Log::Log4perl::JavaMap::JDBCAppender" : { + "file" : "Log/Log4perl/JavaMap/JDBCAppender.pm" + }, + "Log::Log4perl::JavaMap::NTEventLogAppender" : { + "file" : "Log/Log4perl/JavaMap/NTEventLogAppender.pm" + }, + "Log::Log4perl::JavaMap::RollingFileAppender" : { + "file" : "Log/Log4perl/JavaMap/RollingFileAppender.pm" + }, + "Log::Log4perl::JavaMap::SyslogAppender" : { + "file" : "Log/Log4perl/JavaMap/SyslogAppender.pm" + }, + "Log::Log4perl::JavaMap::TestBuffer" : { + "file" : "Log/Log4perl/JavaMap/TestBuffer.pm" + }, + "Log::Log4perl::Layout" : { + "file" : "Log/Log4perl/Layout.pm" + }, + "Log::Log4perl::Layout::NoopLayout" : { + "file" : "Log/Log4perl/Layout/NoopLayout.pm" + }, + "Log::Log4perl::Layout::PatternLayout" : { + "file" : "Log/Log4perl/Layout/PatternLayout.pm" + }, + "Log::Log4perl::Layout::PatternLayout::Multiline" : { + "file" : "Log/Log4perl/Layout/PatternLayout/Multiline.pm" + }, + "Log::Log4perl::Layout::SimpleLayout" : { + "file" : "Log/Log4perl/Layout/SimpleLayout.pm" + }, + "Log::Log4perl::Level" : { + "file" : "Log/Log4perl/Level.pm" + }, + "Log::Log4perl::Logger" : { + "file" : "Log/Log4perl/Logger.pm" + }, + "Log::Log4perl::MDC" : { + "file" : "Log/Log4perl/MDC.pm" + }, + "Log::Log4perl::NDC" : { + "file" : "Log/Log4perl/NDC.pm" + }, + "Log::Log4perl::Resurrector" : { + "file" : "Log/Log4perl/Resurrector.pm" + }, + "Log::Log4perl::Util" : { + "file" : "Log/Log4perl/Util.pm" + }, + "Log::Log4perl::Util::Semaphore" : { + "file" : "Log/Log4perl/Util/Semaphore.pm" + }, + "Log::Log4perl::Util::TimeTracker" : { + "file" : "Log/Log4perl/Util/TimeTracker.pm" + } + }, + "version" : "1.34" + }, + "MIME::Types" : { + "dist" : "MIME-Types-1.32", + "module" : "MIME::Types", + "mymeta" : { + "abstract" : "Definition of MIME types", + "author" : [ + "Mark Overmeer" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "MIME-Types", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : "0.47" + } + } + }, + "release_status" : "stable", + "version" : "1.32" + }, + "name" : "MIME::Types", + "pathname" : "M/MA/MARKOV/MIME-Types-1.32.tar.gz", + "provides" : { + "MIME::Type" : { + "file" : "MIME/Type.pm", + "version" : "1.32" + }, + "MIME::Types" : { + "file" : "MIME/Types.pm", + "version" : "1.32" + } + }, + "version" : "1.32" + }, + "MRO::Compat" : { + "dist" : "MRO-Compat-0.11", + "module" : "MRO::Compat", + "mymeta" : { + "abstract" : "mro::* interface compatibility for Perls < 5.9.5", + "author" : [ + "Brandon L. Black, <blblack@gmail.com>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.91, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "MRO-Compat", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::More" : "0.47" + } + } + }, + "provides" : { + "MRO::Compat" : { + "file" : "lib/MRO/Compat.pm", + "version" : "0.11" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.11" + }, + "name" : "MRO::Compat", + "pathname" : "F/FL/FLORA/MRO-Compat-0.11.tar.gz", + "provides" : { + "MRO::Compat" : { + "file" : "MRO/Compat.pm", + "version" : "0.11" + } + }, + "version" : "0.11" + }, + "Mail" : { + "dist" : "MailTools-2.08", + "module" : "Mail::Address", + "mymeta" : { + "abstract" : "Various e-mail related modules", + "author" : [ + "Mark Overmeer <perl@overmeer.net>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "MailTools", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Date::Format" : 0, + "Date::Parse" : 0, + "IO::Handle" : 0, + "Net::Domain" : "1.05", + "Net::SMTP" : "1.03", + "Test::More" : 0, + "Test::Pod" : "1" + } + } + }, + "release_status" : "stable", + "version" : "2.08" + }, + "name" : "Mail", + "pathname" : "M/MA/MARKOV/MailTools-2.08.tar.gz", + "provides" : { + "Mail::Address" : { + "file" : "Mail/Address.pm", + "version" : "2.08" + }, + "Mail::Cap" : { + "file" : "Mail/Cap.pm", + "version" : "2.08" + }, + "Mail::Field" : { + "file" : "Mail/Field.pm", + "version" : "2.08" + }, + "Mail::Field::AddrList" : { + "file" : "Mail/Field/AddrList.pm", + "version" : "2.08" + }, + "Mail::Field::Date" : { + "file" : "Mail/Field/Date.pm", + "version" : "2.08" + }, + "Mail::Field::Generic" : { + "file" : "Mail/Field/Generic.pm", + "version" : "2.08" + }, + "Mail::Filter" : { + "file" : "Mail/Filter.pm", + "version" : "2.08" + }, + "Mail::Header" : { + "file" : "Mail/Header.pm", + "version" : "2.08" + }, + "Mail::Internet" : { + "file" : "Mail/Internet.pm", + "version" : "2.08" + }, + "Mail::Mailer" : { + "file" : "Mail/Mailer.pm", + "version" : "2.08" + }, + "Mail::Mailer::qmail" : { + "file" : "Mail/Mailer/qmail.pm", + "version" : "2.08" + }, + "Mail::Mailer::rfc822" : { + "file" : "Mail/Mailer/rfc822.pm", + "version" : "2.08" + }, + "Mail::Mailer::sendmail" : { + "file" : "Mail/Mailer/sendmail.pm", + "version" : "2.08" + }, + "Mail::Mailer::smtp" : { + "file" : "Mail/Mailer/smtp.pm", + "version" : "2.08" + }, + "Mail::Mailer::smtp::pipe" : { + "file" : "Mail/Mailer/smtp.pm", + "version" : "2.08" + }, + "Mail::Mailer::smtps" : { + "file" : "Mail/Mailer/smtps.pm", + "version" : "2.08" + }, + "Mail::Mailer::smtps::pipe" : { + "file" : "Mail/Mailer/smtps.pm", + "version" : "2.08" + }, + "Mail::Mailer::testfile" : { + "file" : "Mail/Mailer/testfile.pm", + "version" : "2.08" + }, + "Mail::Mailer::testfile::pipe" : { + "file" : "Mail/Mailer/testfile.pm", + "version" : "2.08" + }, + "Mail::Send" : { + "file" : "Mail/Send.pm", + "version" : "2.08" + }, + "Mail::Util" : { + "file" : "Mail/Util.pm", + "version" : "2.08" + } + }, + "version" : "2.08" + }, + "Math::BigInt" : { + "dist" : "Math-BigInt-1.997", + "module" : "Math::BigInt", + "mymeta" : { + "abstract" : "Arbitrary size integer/float math package", + "author" : [ + "Original code by Mark Biggar, overloaded interface by Ilya Zakharevich., Tels <nospam-abuse@bloodgate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.59, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Math-BigInt", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::More" : "0.62" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "perl" : "5.006002" + } + } + }, + "release_status" : "stable", + "version" : "1.997" + }, + "name" : "Math::BigInt", + "pathname" : "P/PJ/PJACKLAM/Math-BigInt-1.997.tar.gz", + "provides" : { + "Math::BigFloat" : { + "file" : "Math/BigFloat.pm", + "version" : "1.997" + }, + "Math::BigInt" : { + "file" : "Math/BigInt.pm", + "version" : "1.997" + }, + "Math::BigInt::Calc" : { + "file" : "Math/BigInt/Calc.pm", + "version" : "1.997" + }, + "Math::BigInt::CalcEmu" : { + "file" : "Math/BigInt/CalcEmu.pm", + "version" : "1.997" + } + }, + "version" : "1.997" + }, + "Math::BigInt::GMP" : { + "dist" : "Math-BigInt-GMP-1.37", + "module" : "Math::BigInt::GMP", + "mymeta" : { + "abstract" : "Use the GMP library for Math::BigInt routines", + "author" : [ + "Tels" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.59, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Math-BigInt-GMP", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Math::BigInt" : "1.997", + "XSLoader" : "0.02" + } + } + }, + "release_status" : "stable", + "version" : "1.37" + }, + "name" : "Math::BigInt::GMP", + "pathname" : "P/PJ/PJACKLAM/Math-BigInt-GMP-1.37.tar.gz", + "provides" : { + "Math::BigInt::GMP" : { + "file" : "Math/BigInt/GMP.pm", + "version" : "1.37" + } + }, + "version" : "1.37" + }, + "Math::Round" : { + "dist" : "Math-Round-0.06", + "module" : "Math::Round", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Math-Round", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "0.06" + }, + "name" : "Math::Round", + "pathname" : "G/GR/GROMMEL/Math-Round-0.06.tar.gz", + "provides" : { + "Math::Round" : { + "file" : "Math/Round.pm", + "version" : "0.06" + } + }, + "version" : "0.06" + }, + "Module::Extract::Namespaces" : { + "dist" : "Module-Extract-Namespaces-0.14", + "module" : "Module::Extract::Namespaces", + "mymeta" : { + "abstract" : "This is what the module does", + "author" : [ + "brian d foy <bdfoy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.44, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Module-Extract-Namespaces", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "PPI" : 0, + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.14" + }, + "name" : "Module::Extract::Namespaces", + "pathname" : "/authors/id/B/BD/BDFOY/Module-Extract-Namespaces-0.14.tar.gz", + "provides" : { + "Module::Extract::Namespaces" : { + "file" : "Module/Extract/Namespaces.pm", + "version" : "0.14" + } + }, + "version" : "0.14" + }, + "Module::Extract::Use" : { + "dist" : "Module-Extract-Use-0.17", + "module" : "Module::Extract::Use", + "mymeta" : { + "abstract" : "Extract the modules that a modules uses", + "author" : [ + "brian d foy <bdfoy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.48, CPAN::Meta::Converter version 2.112150", + "keywords" : [ + "ppi", + "parsing", + "static-analysis", + "modules" + ], + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Module-Extract-Use", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "PPI" : 0, + "Test::More" : 0, + "Test::Output" : 0, + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "type" : "git", + "url" : "git://github.com/briandfoy/module--extract--use.git" + } + }, + "version" : "0.17" + }, + "name" : "Module::Extract::Use", + "pathname" : "/authors/id/B/BD/BDFOY/Module-Extract-Use-0.17.tar.gz", + "provides" : { + "Module::Extract::Use" : { + "file" : "Module/Extract/Use.pm", + "version" : "0.17" + } + }, + "version" : "0.17" + }, + "Module::Extract::VERSION" : { + "dist" : "Module-Extract-VERSION-0.13", + "module" : "Module::Extract::VERSION", + "mymeta" : { + "abstract" : "Extract ERSION from module source code", + "author" : [ + "brian d foy <bdfoy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.48, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Module-Extract-VERSION", + "no_index" : { + "directory" : [ + "t", + "inc", + "t", + "inc", + "corpus" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.13" + }, + "name" : "Module::Extract::VERSION", + "pathname" : "/authors/id/B/BD/BDFOY/Module-Extract-VERSION-0.13.tar.gz", + "provides" : { + "Module::Extract::VERSION" : { + "file" : "Module/Extract/VERSION.pm", + "version" : "0.13" + } + }, + "version" : "0.13" + }, + "Module::Find" : { + "dist" : "Module-Find-0.10", + "module" : "Module::Find", + "mymeta" : { + "abstract" : "Find and use installed modules in a (sub)category", + "author" : [ + "Christian Renz <crenz@web42.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.52, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Module-Find", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "recommends" : { + "Test::Pod" : "1.14", + "Test::Pod::Coverage" : "1.04" + }, + "requires" : { + "File::Find" : 0, + "File::Spec" : 0, + "perl" : "5.006001" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/crenz/Module-Find" + } + }, + "version" : "0.10" + }, + "name" : "Module::Find", + "pathname" : "/authors/id/C/CR/CRENZ/Module-Find-0.10.tar.gz", + "provides" : { + "Module::Find" : { + "file" : "Module/Find.pm", + "version" : "0.10" + } + }, + "version" : "0.10" + }, + "Module::Runtime" : { + "dist" : "Module-Runtime-0.011", + "module" : "Module::Runtime", + "mymeta" : { + "abstract" : "runtime module handling", + "author" : [ + "Andrew Main (Zefram) <zefram@fysh.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Module-Runtime", + "prereqs" : { + "build" : { + "requires" : { + "Module::Build" : 0, + "Test::More" : 0, + "perl" : "5.006", + "strict" : 0, + "warnings" : 0 + } + }, + "configure" : { + "requires" : { + "Module::Build" : 0, + "perl" : "5.006", + "strict" : 0, + "warnings" : 0 + } + }, + "runtime" : { + "requires" : { + "Exporter" : 0, + "Params::Classify" : 0, + "parent" : 0, + "perl" : "5.006", + "strict" : 0, + "warnings" : 0 + } + } + }, + "provides" : { + "Module::Runtime" : { + "file" : "lib/Module/Runtime.pm", + "version" : "0.011" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.011" + }, + "name" : "Module::Runtime", + "pathname" : "Z/ZE/ZEFRAM/Module-Runtime-0.011.tar.gz", + "provides" : { + "Module::Runtime" : { + "file" : "Module/Runtime.pm", + "version" : "0.011" + } + }, + "version" : "0.011" + }, + "Moose" : { + "dist" : "Moose-2.0401", + "module" : "Moose::Role", + "mymeta" : { + "abstract" : "A postmodern object system for Perl 5", + "author" : [ + "Moose is maintained by the Moose Cabal, along with the help of many contributors. See L<Moose/CABAL> and L<Moose/CONTRIBUTORS> for details." + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.300002, CPAN::Meta::Converter version 2.110440, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Moose", + "no_index" : { + "directory" : [ + "benchmarks" + ], + "namespace" : [ + "Class::MOP::Mixin", + "Moose::Meta::Method::Accessor::Native", + "Moose::Meta::Mixin" + ], + "package" : [ + "Class::MOP::Class::Immutable::Trait", + "Class::MOP::Deprecated", + "Class::MOP::MiniTrait", + "Class::MOP::Mixin", + "Moose::Deprecated", + "Moose::Error::Util", + "Moose::Meta::Attribute::Native::Trait", + "Moose::Meta::Class::Immutable::Trait", + "Moose::Meta::Method::Accessor::Native", + "Moose::Meta::Object::Trait", + "Moose::Util::TypeConstraints::OptimizedConstraints", + "Moose::Util::TypeConstraints::Builtins" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Test::Fatal" : "0.001", + "Test::More" : "0.88", + "Test::Requires" : "0.05" + } + }, + "configure" : { + "requires" : { + "Dist::CheckConflicts" : "0.02", + "ExtUtils::MakeMaker" : "6.30" + } + }, + "runtime" : { + "recommends" : { + "Devel::PartialDump" : "0.14" + }, + "requires" : { + "Class::Load" : "0.09", + "Class::Load::XS" : "0.01", + "Data::OptList" : "0.107", + "Devel::GlobalDestruction" : 0, + "Dist::CheckConflicts" : "0.02", + "Eval::Closure" : "0.04", + "List::MoreUtils" : "0.28", + "MRO::Compat" : "0.05", + "Package::DeprecationManager" : "0.11", + "Package::Stash" : "0.32", + "Package::Stash::XS" : "0.24", + "Params::Util" : "1.00", + "Scalar::Util" : "1.19", + "Sub::Exporter" : "0.980", + "Sub::Name" : "0.05", + "Task::Weaken" : 0, + "Try::Tiny" : "0.02" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Moose" + }, + "repository" : { + "type" : "git", + "url" : "git://git.moose.perl.org/Moose.git" + } + }, + "version" : "2.0401", + "x_authority" : "cpan:STEVAN", + "x_conflicts" : { + "Catalyst" : "5.80028", + "Devel::REPL" : "1.003008", + "Fey" : "0.36", + "Fey::ORM" : "0.42", + "File::ChangeNotify" : "0.15", + "KiokuDB" : "0.51", + "Markdent" : "0.16", + "MooseX::Aliases" : "0.08", + "MooseX::AlwaysCoerce" : "0.13", + "MooseX::Attribute::Deflator" : "2.1.7", + "MooseX::Attribute::Dependent" : "1.1.0", + "MooseX::Attribute::Prototype" : "0.10", + "MooseX::AttributeHelpers" : "0.22", + "MooseX::AttributeIndexes" : "1.0.0", + "MooseX::AttributeInflate" : "0.02", + "MooseX::CascadeClearing" : "0.03", + "MooseX::ClassAttribute" : "0.25", + "MooseX::Constructor::AllErrors" : "0.012", + "MooseX::FollowPBP" : "0.02", + "MooseX::HasDefaults" : "0.02", + "MooseX::InstanceTracking" : "0.04", + "MooseX::LazyRequire" : "0.06", + "MooseX::Meta::Attribute::Index" : "0.04", + "MooseX::Meta::Attribute::Lvalue" : "0.05", + "MooseX::MethodAttributes" : "0.22", + "MooseX::NonMoose" : "0.17", + "MooseX::POE" : "0.211", + "MooseX::Params::Validate" : "0.05", + "MooseX::PrivateSetters" : "0.03", + "MooseX::Role::Cmd" : "0.06", + "MooseX::Role::Parameterized" : "0.23", + "MooseX::Role::WithOverloading" : "0.07", + "MooseX::SemiAffordanceAccessor" : "0.05", + "MooseX::SetOnce" : "0.100473", + "MooseX::Singleton" : "0.25", + "MooseX::SlurpyConstructor" : "1.1", + "MooseX::StrictConstructor" : "0.12", + "MooseX::Types" : "0.19", + "MooseX::Types::Parameterizable" : "0.05", + "MooseX::Types::Signal" : "1.101930", + "MooseX::UndefTolerant" : "0.11", + "PRANG" : "0.14", + "Pod::Elemental" : "0.093280", + "Reaction" : "0.002003", + "Test::Able" : "0.10", + "namespace::autoclean" : "0.08" + } + }, + "name" : "Moose", + "pathname" : "D/DO/DOY/Moose-2.0401.tar.gz", + "provides" : { + "Class::MOP" : { + "file" : "Class/MOP.pm", + "version" : "2.0401" + }, + "Class::MOP::Attribute" : { + "file" : "Class/MOP/Attribute.pm", + "version" : "2.0401" + }, + "Class::MOP::Class" : { + "file" : "Class/MOP/Class.pm", + "version" : "2.0401" + }, + "Class::MOP::Class::Immutable::Trait" : { + "file" : "Class/MOP/Class/Immutable/Trait.pm", + "version" : "2.0401" + }, + "Class::MOP::Deprecated" : { + "file" : "Class/MOP/Deprecated.pm", + "version" : "2.0401" + }, + "Class::MOP::Instance" : { + "file" : "Class/MOP/Instance.pm", + "version" : "2.0401" + }, + "Class::MOP::Method" : { + "file" : "Class/MOP/Method.pm", + "version" : "2.0401" + }, + "Class::MOP::Method::Accessor" : { + "file" : "Class/MOP/Method/Accessor.pm", + "version" : "2.0401" + }, + "Class::MOP::Method::Constructor" : { + "file" : "Class/MOP/Method/Constructor.pm", + "version" : "2.0401" + }, + "Class::MOP::Method::Generated" : { + "file" : "Class/MOP/Method/Generated.pm", + "version" : "2.0401" + }, + "Class::MOP::Method::Inlined" : { + "file" : "Class/MOP/Method/Inlined.pm", + "version" : "2.0401" + }, + "Class::MOP::Method::Meta" : { + "file" : "Class/MOP/Method/Meta.pm", + "version" : "2.0401" + }, + "Class::MOP::Method::Wrapped" : { + "file" : "Class/MOP/Method/Wrapped.pm", + "version" : "2.0401" + }, + "Class::MOP::MiniTrait" : { + "file" : "Class/MOP/MiniTrait.pm", + "version" : "2.0401" + }, + "Class::MOP::Mixin" : { + "file" : "Class/MOP/Mixin.pm", + "version" : "2.0401" + }, + "Class::MOP::Mixin::AttributeCore" : { + "file" : "Class/MOP/Mixin/AttributeCore.pm", + "version" : "2.0401" + }, + "Class::MOP::Mixin::HasAttributes" : { + "file" : "Class/MOP/Mixin/HasAttributes.pm", + "version" : "2.0401" + }, + "Class::MOP::Mixin::HasMethods" : { + "file" : "Class/MOP/Mixin/HasMethods.pm", + "version" : "2.0401" + }, + "Class::MOP::Module" : { + "file" : "Class/MOP/Module.pm", + "version" : "2.0401" + }, + "Class::MOP::Object" : { + "file" : "Class/MOP/Object.pm", + "version" : "2.0401" + }, + "Class::MOP::Package" : { + "file" : "Class/MOP/Package.pm", + "version" : "2.0401" + }, + "Moose" : { + "file" : "Moose.pm", + "version" : "2.0401" + }, + "Moose::Deprecated" : { + "file" : "Moose/Deprecated.pm", + "version" : "2.0401" + }, + "Moose::Error::Confess" : { + "file" : "Moose/Error/Confess.pm", + "version" : "2.0401" + }, + "Moose::Error::Croak" : { + "file" : "Moose/Error/Croak.pm", + "version" : "2.0401" + }, + "Moose::Error::Default" : { + "file" : "Moose/Error/Default.pm", + "version" : "2.0401" + }, + "Moose::Exporter" : { + "file" : "Moose/Exporter.pm", + "version" : "2.0401" + }, + "Moose::Meta::Attribute" : { + "file" : "Moose/Meta/Attribute.pm", + "version" : "2.0401" + }, + "Moose::Meta::Attribute::Custom::Moose" : { + "file" : "Moose/Meta/Attribute.pm", + "version" : "2.0401" + }, + "Moose::Meta::Attribute::Native" : { + "file" : "Moose/Meta/Attribute/Native.pm", + "version" : "2.0401" + }, + "Moose::Meta::Attribute::Native::Trait" : { + "file" : "Moose/Meta/Attribute/Native/Trait.pm", + "version" : "2.0401" + }, + "Moose::Meta::Attribute::Native::Trait::Array" : { + "file" : "Moose/Meta/Attribute/Native/Trait/Array.pm", + "version" : "2.0401" + }, + "Moose::Meta::Attribute::Native::Trait::Bool" : { + "file" : "Moose/Meta/Attribute/Native/Trait/Bool.pm", + "version" : "2.0401" + }, + "Moose::Meta::Attribute::Native::Trait::Code" : { + "file" : "Moose/Meta/Attribute/Native/Trait/Code.pm", + "version" : "2.0401" + }, + "Moose::Meta::Attribute::Native::Trait::Counter" : { + "file" : "Moose/Meta/Attribute/Native/Trait/Counter.pm", + "version" : "2.0401" + }, + "Moose::Meta::Attribute::Native::Trait::Hash" : { + "file" : "Moose/Meta/Attribute/Native/Trait/Hash.pm", + "version" : "2.0401" + }, + "Moose::Meta::Attribute::Native::Trait::Number" : { + "file" : "Moose/Meta/Attribute/Native/Trait/Number.pm", + "version" : "2.0401" + }, + "Moose::Meta::Attribute::Native::Trait::String" : { + "file" : "Moose/Meta/Attribute/Native/Trait/String.pm", + "version" : "2.0401" + }, + "Moose::Meta::Class" : { + "file" : "Moose/Meta/Class.pm", + "version" : "2.0401" + }, + "Moose::Meta::Class::Immutable::Trait" : { + "file" : "Moose/Meta/Class/Immutable/Trait.pm", + "version" : "2.0401" + }, + "Moose::Meta::Instance" : { + "file" : "Moose/Meta/Instance.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method" : { + "file" : "Moose/Meta/Method.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor" : { + "file" : "Moose/Meta/Method/Accessor.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native" : { + "file" : "Moose/Meta/Method/Accessor/Native.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::Writer" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/Writer.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::accessor" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/accessor.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::clear" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/clear.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::count" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/count.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::delete" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/delete.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::elements" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/elements.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::first" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/first.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::first_index" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/first_index.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::get" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/get.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::grep" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/grep.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::insert" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/insert.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::is_empty" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/is_empty.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::join" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/join.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::map" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/map.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::natatime" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/natatime.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::pop" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/pop.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::push" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/push.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::reduce" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/reduce.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::set" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/set.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::shallow_clone" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/shallow_clone.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::shift" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/shift.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::shuffle" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/shuffle.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::sort" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/sort.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::sort_in_place" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/sort_in_place.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::splice" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/splice.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::uniq" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/uniq.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Array::unshift" : { + "file" : "Moose/Meta/Method/Accessor/Native/Array/unshift.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Bool::not" : { + "file" : "Moose/Meta/Method/Accessor/Native/Bool/not.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Bool::set" : { + "file" : "Moose/Meta/Method/Accessor/Native/Bool/set.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Bool::toggle" : { + "file" : "Moose/Meta/Method/Accessor/Native/Bool/toggle.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Bool::unset" : { + "file" : "Moose/Meta/Method/Accessor/Native/Bool/unset.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Code::execute" : { + "file" : "Moose/Meta/Method/Accessor/Native/Code/execute.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Code::execute_method" : { + "file" : "Moose/Meta/Method/Accessor/Native/Code/execute_method.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Collection" : { + "file" : "Moose/Meta/Method/Accessor/Native/Collection.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Counter::Writer" : { + "file" : "Moose/Meta/Method/Accessor/Native/Counter/Writer.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Counter::dec" : { + "file" : "Moose/Meta/Method/Accessor/Native/Counter/dec.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Counter::inc" : { + "file" : "Moose/Meta/Method/Accessor/Native/Counter/inc.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Counter::reset" : { + "file" : "Moose/Meta/Method/Accessor/Native/Counter/reset.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Counter::set" : { + "file" : "Moose/Meta/Method/Accessor/Native/Counter/set.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::Writer" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/Writer.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::accessor" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/accessor.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::clear" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/clear.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::count" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/count.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::defined" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/defined.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::delete" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/delete.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::elements" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/elements.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::exists" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/exists.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::get" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/get.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::is_empty" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/is_empty.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::keys" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/keys.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::kv" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/kv.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::set" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/set.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::shallow_clone" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/shallow_clone.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Hash::values" : { + "file" : "Moose/Meta/Method/Accessor/Native/Hash/values.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Number::abs" : { + "file" : "Moose/Meta/Method/Accessor/Native/Number/abs.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Number::add" : { + "file" : "Moose/Meta/Method/Accessor/Native/Number/add.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Number::div" : { + "file" : "Moose/Meta/Method/Accessor/Native/Number/div.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Number::mod" : { + "file" : "Moose/Meta/Method/Accessor/Native/Number/mod.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Number::mul" : { + "file" : "Moose/Meta/Method/Accessor/Native/Number/mul.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Number::set" : { + "file" : "Moose/Meta/Method/Accessor/Native/Number/set.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Number::sub" : { + "file" : "Moose/Meta/Method/Accessor/Native/Number/sub.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Reader" : { + "file" : "Moose/Meta/Method/Accessor/Native/Reader.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::String::append" : { + "file" : "Moose/Meta/Method/Accessor/Native/String/append.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::String::chomp" : { + "file" : "Moose/Meta/Method/Accessor/Native/String/chomp.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::String::chop" : { + "file" : "Moose/Meta/Method/Accessor/Native/String/chop.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::String::clear" : { + "file" : "Moose/Meta/Method/Accessor/Native/String/clear.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::String::inc" : { + "file" : "Moose/Meta/Method/Accessor/Native/String/inc.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::String::length" : { + "file" : "Moose/Meta/Method/Accessor/Native/String/length.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::String::match" : { + "file" : "Moose/Meta/Method/Accessor/Native/String/match.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::String::prepend" : { + "file" : "Moose/Meta/Method/Accessor/Native/String/prepend.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::String::replace" : { + "file" : "Moose/Meta/Method/Accessor/Native/String/replace.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::String::substr" : { + "file" : "Moose/Meta/Method/Accessor/Native/String/substr.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Accessor::Native::Writer" : { + "file" : "Moose/Meta/Method/Accessor/Native/Writer.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Augmented" : { + "file" : "Moose/Meta/Method/Augmented.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Constructor" : { + "file" : "Moose/Meta/Method/Constructor.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Delegation" : { + "file" : "Moose/Meta/Method/Delegation.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Destructor" : { + "file" : "Moose/Meta/Method/Destructor.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Meta" : { + "file" : "Moose/Meta/Method/Meta.pm", + "version" : "2.0401" + }, + "Moose::Meta::Method::Overridden" : { + "file" : "Moose/Meta/Method/Overridden.pm", + "version" : "2.0401" + }, + "Moose::Meta::Mixin::AttributeCore" : { + "file" : "Moose/Meta/Mixin/AttributeCore.pm", + "version" : "2.0401" + }, + "Moose::Meta::Object::Trait" : { + "file" : "Moose/Meta/Object/Trait.pm", + "version" : "2.0401" + }, + "Moose::Meta::Role" : { + "file" : "Moose/Meta/Role.pm", + "version" : "2.0401" + }, + "Moose::Meta::Role::Application" : { + "file" : "Moose/Meta/Role/Application.pm", + "version" : "2.0401" + }, + "Moose::Meta::Role::Application::RoleSummation" : { + "file" : "Moose/Meta/Role/Application/RoleSummation.pm", + "version" : "2.0401" + }, + "Moose::Meta::Role::Application::ToClass" : { + "file" : "Moose/Meta/Role/Application/ToClass.pm", + "version" : "2.0401" + }, + "Moose::Meta::Role::Application::ToInstance" : { + "file" : "Moose/Meta/Role/Application/ToInstance.pm", + "version" : "2.0401" + }, + "Moose::Meta::Role::Application::ToRole" : { + "file" : "Moose/Meta/Role/Application/ToRole.pm", + "version" : "2.0401" + }, + "Moose::Meta::Role::Attribute" : { + "file" : "Moose/Meta/Role/Attribute.pm", + "version" : "2.0401" + }, + "Moose::Meta::Role::Composite" : { + "file" : "Moose/Meta/Role/Composite.pm", + "version" : "2.0401" + }, + "Moose::Meta::Role::Method" : { + "file" : "Moose/Meta/Role/Method.pm", + "version" : "2.0401" + }, + "Moose::Meta::Role::Method::Conflicting" : { + "file" : "Moose/Meta/Role/Method/Conflicting.pm", + "version" : "2.0401" + }, + "Moose::Meta::Role::Method::Required" : { + "file" : "Moose/Meta/Role/Method/Required.pm", + "version" : "2.0401" + }, + "Moose::Meta::TypeCoercion" : { + "file" : "Moose/Meta/TypeCoercion.pm", + "version" : "2.0401" + }, + "Moose::Meta::TypeCoercion::Union" : { + "file" : "Moose/Meta/TypeCoercion/Union.pm", + "version" : "2.0401" + }, + "Moose::Meta::TypeConstraint" : { + "file" : "Moose/Meta/TypeConstraint.pm", + "version" : "2.0401" + }, + "Moose::Meta::TypeConstraint::Class" : { + "file" : "Moose/Meta/TypeConstraint/Class.pm", + "version" : "2.0401" + }, + "Moose::Meta::TypeConstraint::DuckType" : { + "file" : "Moose/Meta/TypeConstraint/DuckType.pm", + "version" : "2.0401" + }, + "Moose::Meta::TypeConstraint::Enum" : { + "file" : "Moose/Meta/TypeConstraint/Enum.pm", + "version" : "2.0401" + }, + "Moose::Meta::TypeConstraint::Parameterizable" : { + "file" : "Moose/Meta/TypeConstraint/Parameterizable.pm", + "version" : "2.0401" + }, + "Moose::Meta::TypeConstraint::Parameterized" : { + "file" : "Moose/Meta/TypeConstraint/Parameterized.pm", + "version" : "2.0401" + }, + "Moose::Meta::TypeConstraint::Registry" : { + "file" : "Moose/Meta/TypeConstraint/Registry.pm", + "version" : "2.0401" + }, + "Moose::Meta::TypeConstraint::Role" : { + "file" : "Moose/Meta/TypeConstraint/Role.pm", + "version" : "2.0401" + }, + "Moose::Meta::TypeConstraint::Union" : { + "file" : "Moose/Meta/TypeConstraint/Union.pm", + "version" : "2.0401" + }, + "Moose::Object" : { + "file" : "Moose/Object.pm", + "version" : "2.0401" + }, + "Moose::Role" : { + "file" : "Moose/Role.pm", + "version" : "2.0401" + }, + "Moose::Util" : { + "file" : "Moose/Util.pm", + "version" : "2.0401" + }, + "Moose::Util::MetaRole" : { + "file" : "Moose/Util/MetaRole.pm", + "version" : "2.0401" + }, + "Moose::Util::TypeConstraints" : { + "file" : "Moose/Util/TypeConstraints.pm", + "version" : "2.0401" + }, + "Moose::Util::TypeConstraints::Builtins" : { + "file" : "Moose/Util/TypeConstraints/Builtins.pm", + "version" : "2.0401" + }, + "Test::Moose" : { + "file" : "Test/Moose.pm", + "version" : "2.0401" + }, + "metaclass" : { + "file" : "metaclass.pm", + "version" : "2.0401" + }, + "oose" : { + "file" : "oose.pm", + "version" : "2.0401" + } + }, + "version" : "2.0401" + }, + "MooseX::Emulate::Class::Accessor::Fast" : { + "dist" : "MooseX-Emulate-Class-Accessor-Fast-0.00903", + "module" : "MooseX::Emulate::Class::Accessor::Fast", + "mymeta" : { + "abstract" : "Emulate Class::Accessor::Fast behavior using Moose attributes", + "author" : [ + "Guillermo Roditi (groditi) <groditi@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.91, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "MooseX-Emulate-Class-Accessor-Fast", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Moose" : "0.84", + "Test::Exception" : 0, + "Test::More" : 0, + "namespace::clean" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.00903" + }, + "name" : "MooseX::Emulate::Class::Accessor::Fast", + "pathname" : "F/FL/FLORA/MooseX-Emulate-Class-Accessor-Fast-0.00903.tar.gz", + "provides" : { + "MooseX::Adopt::Class::Accessor::Fast" : { + "file" : "MooseX/Adopt/Class/Accessor/Fast.pm", + "version" : "0.00200" + }, + "MooseX::Emulate::Class::Accessor::Fast" : { + "file" : "MooseX/Emulate/Class/Accessor/Fast.pm", + "version" : "0.00903" + }, + "MooseX::Emulate::Class::Accessor::Fast::Meta::Accessor" : { + "file" : "MooseX/Emulate/Class/Accessor/Fast/Meta/Accessor.pm" + }, + "MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute" : { + "file" : "MooseX/Emulate/Class/Accessor/Fast/Meta/Role/Attribute.pm" + } + }, + "version" : "0.00903" + }, + "MooseX::Getopt" : { + "dist" : "MooseX-Getopt-0.35", + "module" : "MooseX::Getopt", + "mymeta" : { + "abstract" : "A Moose role for processing command line options", + "author" : [ + "Stevan Little <stevan@iinteractive.com>", + "Brandon L. Black <blblack@gmail.com>", + "Yuval Kogman <nothingmuch@woobling.org>", + "Ryan D Johnson <ryan@innerfence.com>", + "Drew Taylor <drew@drewtaylor.com>", + "Tomas Doran <bobtfish@bobtfish.net>", + "Florian Ragwitz <rafl@debian.org>", + "Dagfinn Ilmari MannsÃ¥ker <ilmari@ilmari.org>", + "Ævar Arnfjörð Bjarmason <avar@cpan.org>", + "Chris Prather <perigrin@cpan.org>", + "Karen Etheridge <ether@cpan.org>", + "Jonathan Swartz <swartz@pobox.com>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.200001, CPAN::Meta::Converter version 2.101610, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "MooseX-Getopt", + "prereqs" : { + "build" : { + "requires" : { + "Test::Fatal" : "0.003", + "Test::More" : "0.88", + "Test::Requires" : "0.05", + "Test::Warn" : "0.21" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.31" + } + }, + "runtime" : { + "requires" : { + "Getopt::Long" : "2.37", + "Getopt::Long::Descriptive" : "0.081", + "Moose" : "0.56" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=MooseX-Getopt" + }, + "homepage" : "http://search.cpan.org/dist/MooseX-Getopt", + "repository" : { + "type" : "git", + "url" : "git://git.moose.perl.org/MooseX-Getopt.git" + } + }, + "version" : "0.35", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@FLORA/@Basic/GatherDir", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@FLORA/@Basic/PruneCruft", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@FLORA/@Basic/ManifestSkip", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@FLORA/@Basic/MetaYAML", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@FLORA/@Basic/License", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@FLORA/@Basic/Readme", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@FLORA/@Basic/ExtraTests", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@FLORA/@Basic/ExecDir", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@FLORA/@Basic/ShareDir", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::MakeMaker", + "name" : "@FLORA/@Basic/MakeMaker", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@FLORA/@Basic/Manifest", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::TestRelease", + "name" : "@FLORA/@Basic/TestRelease", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@FLORA/@Basic/ConfirmRelease", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@FLORA/@Basic/UploadToCPAN", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@FLORA/MetaConfig", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@FLORA/MetaJSON", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@FLORA/PkgVersion", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@FLORA/PodSyntaxTests", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::NoTabsTests", + "name" : "@FLORA/NoTabsTests", + "version" : "0.01" + }, + { + "class" : "Dist::Zilla::Plugin::PodCoverageTests", + "name" : "@FLORA/PodCoverageTests", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::MetaResources", + "name" : "@FLORA/MetaResources", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::Authority", + "name" : "@FLORA/Authority", + "version" : "0.01" + }, + { + "class" : "Dist::Zilla::Plugin::EOLTests", + "name" : "@FLORA/EOLTests", + "version" : "0.02" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@FLORA/PodWeaver", + "version" : "3.101640" + }, + { + "class" : "Dist::Zilla::Plugin::Prereq", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "runtime", + "type" : "requires" + } + }, + "name" : "Prereq", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::Prereq", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "TestRequires", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "4.200001" + } + ], + "zilla" : { + "class" : "Dist::Zilla::Dist::Builder", + "config" : { + "is_trial" : 0 + }, + "version" : "4.200001" + } + }, + "x_authority" : "cpan:STEVAN" + }, + "name" : "MooseX::Getopt", + "pathname" : "/authors/id/B/BO/BOBTFISH/MooseX-Getopt-0.35.tar.gz", + "provides" : { + "MooseX::Getopt" : { + "file" : "MooseX/Getopt.pm", + "version" : "0.35" + }, + "MooseX::Getopt::Basic" : { + "file" : "MooseX/Getopt/Basic.pm", + "version" : "0.35" + }, + "MooseX::Getopt::Dashes" : { + "file" : "MooseX/Getopt/Dashes.pm", + "version" : "0.35" + }, + "MooseX::Getopt::GLD" : { + "file" : "MooseX/Getopt/GLD.pm", + "version" : "0.35" + }, + "MooseX::Getopt::Meta::Attribute" : { + "file" : "MooseX/Getopt/Meta/Attribute.pm", + "version" : "0.35" + }, + "MooseX::Getopt::Meta::Attribute::NoGetopt" : { + "file" : "MooseX/Getopt/Meta/Attribute/NoGetopt.pm", + "version" : "0.35" + }, + "MooseX::Getopt::Meta::Attribute::Trait" : { + "file" : "MooseX/Getopt/Meta/Attribute/Trait.pm", + "version" : "0.35" + }, + "MooseX::Getopt::Meta::Attribute::Trait::NoGetopt" : { + "file" : "MooseX/Getopt/Meta/Attribute/Trait/NoGetopt.pm", + "version" : "0.35" + }, + "MooseX::Getopt::OptionTypeMap" : { + "file" : "MooseX/Getopt/OptionTypeMap.pm", + "version" : "0.35" + }, + "MooseX::Getopt::ProcessedArgv" : { + "file" : "MooseX/Getopt/ProcessedArgv.pm", + "version" : "0.35" + }, + "MooseX::Getopt::Strict" : { + "file" : "MooseX/Getopt/Strict.pm", + "version" : "0.35" + } + }, + "version" : "0.35" + }, + "MooseX::MethodAttributes" : { + "dist" : "MooseX-MethodAttributes-0.25", + "module" : "MooseX::MethodAttributes::Inheritable", + "mymeta" : { + "abstract" : "code attribute introspection", + "author" : [ + "Florian Ragwitz <rafl@debian.org>", + "Tomas Doran <bobtfish@bobtfish.net>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.200007, CPAN::Meta::Converter version 2.110440, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "MooseX-MethodAttributes", + "prereqs" : { + "build" : { + "requires" : { + "Test::Exception" : 0, + "Test::More" : "0.88", + "namespace::autoclean" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.30" + } + }, + "runtime" : { + "requires" : { + "Moose" : "0.98", + "MooseX::Types::Moose" : "0.21", + "namespace::clean" : "0.10" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=MooseX-MethodAttributes" + }, + "homepage" : "http://search.cpan.org/dist/MooseX-MethodAttributes", + "repository" : { + "type" : "git", + "url" : "git://github.com/rafl/moosex-methodattributes.git" + } + }, + "version" : "0.25", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::Prereq", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "runtime", + "type" : "requires" + } + }, + "name" : "Prereq", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::Prereq", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "TestRequires", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@FLORA/@Basic/GatherDir", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@FLORA/@Basic/PruneCruft", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@FLORA/@Basic/ManifestSkip", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@FLORA/@Basic/MetaYAML", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@FLORA/@Basic/License", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@FLORA/@Basic/Readme", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@FLORA/@Basic/ExtraTests", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@FLORA/@Basic/ExecDir", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@FLORA/@Basic/ShareDir", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::MakeMaker", + "name" : "@FLORA/@Basic/MakeMaker", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@FLORA/@Basic/Manifest", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::TestRelease", + "name" : "@FLORA/@Basic/TestRelease", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@FLORA/@Basic/ConfirmRelease", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@FLORA/@Basic/UploadToCPAN", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@FLORA/MetaConfig", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@FLORA/MetaJSON", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@FLORA/PkgVersion", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@FLORA/PodSyntaxTests", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::NoTabsTests", + "name" : "@FLORA/NoTabsTests", + "version" : "0.01" + }, + { + "class" : "Dist::Zilla::Plugin::PodCoverageTests", + "name" : "@FLORA/PodCoverageTests", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::MetaResources", + "name" : "@FLORA/MetaResources", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::Authority", + "name" : "@FLORA/Authority", + "version" : "1.005" + }, + { + "class" : "Dist::Zilla::Plugin::EOLTests", + "name" : "@FLORA/EOLTests", + "version" : "0.02" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@FLORA/PodWeaver", + "version" : "3.101641" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":IncModules", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "4.200007" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":MainModule", + "version" : "4.200007" + } + ], + "zilla" : { + "class" : "Dist::Zilla::Dist::Builder", + "config" : { + "is_trial" : 0 + }, + "version" : "4.200007" + } + }, + "x_authority" : "cpan:FLORA" + }, + "name" : "MooseX::MethodAttributes", + "pathname" : "B/BO/BOBTFISH/MooseX-MethodAttributes-0.25.tar.gz", + "provides" : { + "MooseX::MethodAttributes" : { + "file" : "MooseX/MethodAttributes.pm", + "version" : "0.25" + }, + "MooseX::MethodAttributes::Inheritable" : { + "file" : "MooseX/MethodAttributes/Inheritable.pm", + "version" : "0.25" + }, + "MooseX::MethodAttributes::Role" : { + "file" : "MooseX/MethodAttributes/Role.pm", + "version" : "0.25" + }, + "MooseX::MethodAttributes::Role::AttrContainer" : { + "file" : "MooseX/MethodAttributes/Role/AttrContainer.pm", + "version" : "0.25" + }, + "MooseX::MethodAttributes::Role::AttrContainer::Inheritable" : { + "file" : "MooseX/MethodAttributes/Role/AttrContainer/Inheritable.pm", + "version" : "0.25" + }, + "MooseX::MethodAttributes::Role::Meta::Class" : { + "file" : "MooseX/MethodAttributes/Role/Meta/Class.pm", + "version" : "0.25" + }, + "MooseX::MethodAttributes::Role::Meta::Map" : { + "file" : "MooseX/MethodAttributes/Role/Meta/Map.pm", + "version" : "0.25" + }, + "MooseX::MethodAttributes::Role::Meta::Method" : { + "file" : "MooseX/MethodAttributes/Role/Meta/Method.pm", + "version" : "0.25" + }, + "MooseX::MethodAttributes::Role::Meta::Method::MaybeWrapped" : { + "file" : "MooseX/MethodAttributes/Role/Meta/Method/MaybeWrapped.pm", + "version" : "0.25" + }, + "MooseX::MethodAttributes::Role::Meta::Method::Wrapped" : { + "file" : "MooseX/MethodAttributes/Role/Meta/Method/Wrapped.pm", + "version" : "0.25" + }, + "MooseX::MethodAttributes::Role::Meta::Role" : { + "file" : "MooseX/MethodAttributes/Role/Meta/Role.pm", + "version" : "0.25" + }, + "MooseX::MethodAttributes::Role::Meta::Role::Application" : { + "file" : "MooseX/MethodAttributes/Role/Meta/Role/Application.pm", + "version" : "0.25" + }, + "MooseX::MethodAttributes::Role::Meta::Role::Application::Summation" : { + "file" : "MooseX/MethodAttributes/Role/Meta/Role/Application/Summation.pm", + "version" : "0.25" + } + }, + "version" : "0.25" + }, + "MooseX::Role::WithOverloading" : { + "dist" : "MooseX-Role-WithOverloading-0.09", + "module" : "MooseX::Role::WithOverloading", + "mymeta" : { + "abstract" : "Roles which support overloading", + "author" : [ + "Florian Ragwitz <rafl@debian.org>", + "Tomas Doran <bobtfish@bobtfish.net>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.200000, CPAN::Meta::Converter version 2.102400, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "MooseX-Role-WithOverloading", + "prereqs" : { + "build" : { + "requires" : { + "FindBin" : 0, + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.31" + } + }, + "runtime" : { + "requires" : { + "Moose" : "0.94", + "Moose::Exporter" : 0, + "Moose::Role" : "1.15", + "Moose::Util::MetaRole" : 0, + "MooseX::Types::Moose" : 0, + "XSLoader" : 0, + "aliased" : 0, + "namespace::autoclean" : 0, + "namespace::clean" : 0, + "overload" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=MooseX-Role-WithOverloading" + }, + "homepage" : "http://search.cpan.org/dist/MooseX-Role-WithOverloading", + "repository" : { + "type" : "git", + "url" : "git://github.com/rafl/moosex-role-withoverloading.git" + } + }, + "version" : "0.09", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@FLORA/@Basic/GatherDir", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@FLORA/@Basic/PruneCruft", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@FLORA/@Basic/ManifestSkip", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@FLORA/@Basic/MetaYAML", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@FLORA/@Basic/License", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@FLORA/@Basic/Readme", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@FLORA/@Basic/ExtraTests", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@FLORA/@Basic/ExecDir", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@FLORA/@Basic/ShareDir", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::MakeMaker", + "name" : "@FLORA/@Basic/MakeMaker", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@FLORA/@Basic/Manifest", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::TestRelease", + "name" : "@FLORA/@Basic/TestRelease", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@FLORA/@Basic/ConfirmRelease", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@FLORA/@Basic/UploadToCPAN", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@FLORA/MetaConfig", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@FLORA/MetaJSON", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@FLORA/PkgVersion", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@FLORA/PodSyntaxTests", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::NoTabsTests", + "name" : "@FLORA/NoTabsTests", + "version" : "0.01" + }, + { + "class" : "Dist::Zilla::Plugin::PodCoverageTests", + "name" : "@FLORA/PodCoverageTests", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::MetaResources", + "name" : "@FLORA/MetaResources", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::Authority", + "name" : "@FLORA/Authority", + "version" : "1.002" + }, + { + "class" : "Dist::Zilla::Plugin::EOLTests", + "name" : "@FLORA/EOLTests", + "version" : "0.02" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@FLORA/PodWeaver", + "version" : "3.101641" + }, + { + "class" : "Dist::Zilla::Plugin::AutoPrereqs", + "name" : "@FLORA/AutoPrereqs", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "4.200000" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "4.200000" + } + ], + "zilla" : { + "class" : "Dist::Zilla::Dist::Builder", + "config" : { + "is_trial" : 0 + }, + "version" : "4.200000" + } + }, + "x_authority" : "cpan:FLORA" + }, + "name" : "MooseX::Role::WithOverloading", + "pathname" : "F/FL/FLORA/MooseX-Role-WithOverloading-0.09.tar.gz", + "provides" : { + "MooseX::Role::WithOverloading" : { + "file" : "MooseX/Role/WithOverloading.pm", + "version" : "0.09" + }, + "MooseX::Role::WithOverloading::Meta::Role" : { + "file" : "MooseX/Role/WithOverloading/Meta/Role.pm", + "version" : "0.09" + }, + "MooseX::Role::WithOverloading::Meta::Role::Application" : { + "file" : "MooseX/Role/WithOverloading/Meta/Role/Application.pm", + "version" : "0.09" + }, + "MooseX::Role::WithOverloading::Meta::Role::Application::Composite" : { + "file" : "MooseX/Role/WithOverloading/Meta/Role/Application/Composite.pm", + "version" : "0.09" + }, + "MooseX::Role::WithOverloading::Meta::Role::Application::Composite::ToClass" : { + "file" : "MooseX/Role/WithOverloading/Meta/Role/Application/Composite/ToClass.pm", + "version" : "0.09" + }, + "MooseX::Role::WithOverloading::Meta::Role::Application::Composite::ToInstance" : { + "file" : "MooseX/Role/WithOverloading/Meta/Role/Application/Composite/ToInstance.pm", + "version" : "0.09" + }, + "MooseX::Role::WithOverloading::Meta::Role::Application::Composite::ToRole" : { + "file" : "MooseX/Role/WithOverloading/Meta/Role/Application/Composite/ToRole.pm", + "version" : "0.09" + }, + "MooseX::Role::WithOverloading::Meta::Role::Application::FixOverloadedRefs" : { + "file" : "MooseX/Role/WithOverloading/Meta/Role/Application/FixOverloadedRefs.pm", + "version" : "0.09" + }, + "MooseX::Role::WithOverloading::Meta::Role::Application::ToClass" : { + "file" : "MooseX/Role/WithOverloading/Meta/Role/Application/ToClass.pm", + "version" : "0.09" + }, + "MooseX::Role::WithOverloading::Meta::Role::Application::ToInstance" : { + "file" : "MooseX/Role/WithOverloading/Meta/Role/Application/ToInstance.pm", + "version" : "0.09" + }, + "MooseX::Role::WithOverloading::Meta::Role::Application::ToRole" : { + "file" : "MooseX/Role/WithOverloading/Meta/Role/Application/ToRole.pm", + "version" : "0.09" + }, + "MooseX::Role::WithOverloading::Meta::Role::Composite" : { + "file" : "MooseX/Role/WithOverloading/Meta/Role/Composite.pm", + "version" : "0.09" + } + }, + "version" : "0.09" + }, + "MooseX::Traits::Pluggable" : { + "dist" : "MooseX-Traits-Pluggable-0.10", + "module" : "MooseX::Traits::Pluggable", + "mymeta" : { + "abstract" : "trait loading and resolution for Moose", + "author" : [ + "Rafael Kitover C<< <rkitover@cpan.org> >>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "MooseX-Traits-Pluggable", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::Exception" : 0, + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Class::MOP" : "0.84", + "List::MoreUtils" : 0, + "Moose" : 0, + "Moose::Role" : 0, + "Scalar::Util" : 0, + "Test::Exception" : 0, + "Test::More" : 0, + "namespace::autoclean" : 0 + } + } + }, + "provides" : { + "MooseX::Traits::Pluggable" : { + "file" : "lib/MooseX/Traits/Pluggable.pm", + "version" : "0.10" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://github.com/rkitover/moosex-traits-pluggable.git" + } + }, + "version" : "0.10" + }, + "name" : "MooseX::Traits::Pluggable", + "pathname" : "R/RK/RKITOVER/MooseX-Traits-Pluggable-0.10.tar.gz", + "provides" : { + "MooseX::Traits::Pluggable" : { + "file" : "MooseX/Traits/Pluggable.pm", + "version" : "0.10" + } + }, + "version" : "0.10" + }, + "MooseX::Types" : { + "dist" : "MooseX-Types-0.30", + "module" : "MooseX::Types::Moose", + "mymeta" : { + "abstract" : "Organise your Moose types in libraries", + "author" : [ + "Robert \"phaylon\" Sedlacek <rs@474.at>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.300000, CPAN::Meta::Converter version 2.110930, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "MooseX-Types", + "prereqs" : { + "build" : { + "requires" : { + "FindBin" : 0, + "Test::Fatal" : 0, + "Test::Moose" : 0, + "Test::More" : "0.88", + "Test::Requires" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.30" + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Carp::Clan" : "6.00", + "Moose" : "1.06", + "Scalar::Util" : "1.19", + "Sub::Install" : "0.924", + "Sub::Name" : 0, + "namespace::clean" : "0.19" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=MooseX-Types" + }, + "repository" : { + "type" : "git", + "url" : "git://git.moose.perl.org/MooseX-Types.git" + } + }, + "version" : "0.30" + }, + "name" : "MooseX::Types", + "pathname" : "D/DR/DROLSKY/MooseX-Types-0.30.tar.gz", + "provides" : { + "MooseX::Types" : { + "file" : "MooseX/Types.pm", + "version" : "0.30" + }, + "MooseX::Types::Base" : { + "file" : "MooseX/Types/Base.pm", + "version" : "0.30" + }, + "MooseX::Types::CheckedUtilExports" : { + "file" : "MooseX/Types/CheckedUtilExports.pm", + "version" : "0.30" + }, + "MooseX::Types::Combine" : { + "file" : "MooseX/Types/Combine.pm", + "version" : "0.30" + }, + "MooseX::Types::Moose" : { + "file" : "MooseX/Types/Moose.pm", + "version" : "0.30" + }, + "MooseX::Types::TypeDecorator" : { + "file" : "MooseX/Types/TypeDecorator.pm", + "version" : "0.30" + }, + "MooseX::Types::UndefinedType" : { + "file" : "MooseX/Types/UndefinedType.pm", + "version" : "0.30" + }, + "MooseX::Types::Util" : { + "file" : "MooseX/Types/Util.pm", + "version" : "0.30" + }, + "MooseX::Types::Wrapper" : { + "file" : "MooseX/Types/Wrapper.pm", + "version" : "0.30" + } + }, + "version" : "0.30" + }, + "MooseX::Types::Common" : { + "dist" : "MooseX-Types-Common-0.001004", + "module" : "MooseX::Types::Common::Numeric", + "mymeta" : { + "abstract" : "A library of commonly used type constraints", + "author" : [ + "This distribution was extracted from the L<Reaction> code base by Guillermo" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.04, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "MooseX-Types-Common", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.36", + "Test::Fatal" : 0, + "Test::More" : "0.62" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.36" + } + }, + "runtime" : { + "requires" : { + "Moose" : "0.39", + "MooseX::Types" : "0.04" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://git.moose.perl.org/MooseX-Types-Common.git" + }, + "x_IRC" : "irc://irc.perl.org/#moose" + }, + "version" : "0.001004" + }, + "name" : "MooseX::Types::Common", + "pathname" : "A/AR/ARCANEZ/MooseX-Types-Common-0.001004.tar.gz", + "provides" : { + "MooseX::Types::Common" : { + "file" : "MooseX/Types/Common.pm", + "version" : "0.001004" + }, + "MooseX::Types::Common::Numeric" : { + "file" : "MooseX/Types/Common/Numeric.pm", + "version" : "0.001004" + }, + "MooseX::Types::Common::String" : { + "file" : "MooseX/Types/Common/String.pm", + "version" : "0.001004" + } + }, + "version" : "0.001004" + }, + "MyCPAN::App::DPAN" : { + "dist" : "MyCPAN-App-DPAN-1.28", + "module" : "MyCPAN::App::DPAN", + "mymeta" : { + "abstract" : "Create a custom, private DarkPAN repository that looks just like a real CPAN", + "author" : [ + "brian d foy <bdfoy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.50, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "MyCPAN-App-DPAN", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "CPAN::Checksums" : 0, + "CPAN::PackageDetails" : "0.24", + "Log::Log4perl" : 0, + "MyCPAN::Indexer" : "1.28", + "Test::Output" : "0.13", + "version" : 0 + } + } + }, + "release_status" : "stable", + "version" : "1.28" + }, + "name" : "MyCPAN::App::DPAN", + "pathname" : "/authors/id/B/BD/BDFOY/MyCPAN-App-DPAN-1.28.tar.gz", + "provides" : { + "CPAN::Modulelist" : { + "file" : "MyCPAN/App/DPAN/Reporter/AsYAML.pm" + }, + "MyCPAN::App::DPAN" : { + "file" : "MyCPAN/App/DPAN.pm", + "version" : "1.28" + }, + "MyCPAN::App::DPAN::Indexer" : { + "file" : "MyCPAN/App/DPAN/Indexer.pm", + "version" : "1.28" + }, + "MyCPAN::App::DPAN::Reporter::AsYAML" : { + "file" : "MyCPAN/App/DPAN/Reporter/AsYAML.pm", + "version" : "1.28" + }, + "MyCPAN::App::DPAN::Reporter::Minimal" : { + "file" : "MyCPAN/App/DPAN/Reporter/Minimal.pm", + "version" : "1.28" + }, + "MyCPAN::App::DPAN::SkipQueue" : { + "file" : "MyCPAN/App/DPAN/SkipQueue.pm", + "version" : "1.28" + } + }, + "version" : "1.28" + }, + "MyCPAN::Indexer" : { + "dist" : "MyCPAN-Indexer-1.28", + "module" : "MyCPAN::Indexer", + "mymeta" : { + "abstract" : "Index a Perl distribution", + "author" : [ + "brian d foy <bdfoy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.50, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "MyCPAN-Indexer", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Archive::Extract" : 0, + "Archive::Tar" : 0, + "CPAN::Checksums" : 0, + "CPAN::PackageDetails" : "0.21", + "ConfigReader::Simple" : 0, + "Data::UUID" : 0, + "Digest::MD5" : 0, + "Distribution::Guess::BuildSystem" : "0.11", + "File::Find" : 0, + "File::Find::Closures" : 0, + "Log::Log4perl" : 0, + "Module::Extract::Namespaces" : "0.14", + "Module::Extract::Use" : "0.13", + "Module::Extract::VERSION" : "0.13", + "Parallel::ForkManager" : 0, + "Probe::Perl" : 0, + "Test::More" : 0, + "Test::Output" : "0.13", + "YAML" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "homepage" : "http://github.com/briandfoy/mycpan-indexer/tree/master", + "repository" : { + "type" : "git", + "url" : "git://github.com/briandfoy/mycpan-indexer.git" + } + }, + "version" : "1.28" + }, + "name" : "MyCPAN::Indexer", + "pathname" : "/authors/id/B/BD/BDFOY/MyCPAN-Indexer-1.28.tar.gz", + "provides" : { + "MyCPAN::App::BackPAN::Indexer" : { + "file" : "MyCPAN/App/BackPAN/Indexer.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer" : { + "file" : "MyCPAN/Indexer.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::Component" : { + "file" : "MyCPAN/Indexer/Component.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::Coordinator" : { + "file" : "MyCPAN/Indexer/Coordinator.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::Dispatcher::Parallel" : { + "file" : "MyCPAN/Indexer/Dispatcher/Parallel.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::Dispatcher::Serial" : { + "file" : "MyCPAN/Indexer/Dispatcher/Serial.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::Interface::Curses" : { + "file" : "MyCPAN/Indexer/Interface/Curses.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::Interface::Text" : { + "file" : "MyCPAN/Indexer/Interface/Text.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::Interface::Tk" : { + "file" : "MyCPAN/Indexer/Interface/Tk.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::Notes" : { + "file" : "MyCPAN/Indexer/Notes.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::NullTester" : { + "file" : "MyCPAN/Indexer/NullTester.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::NullTester::Dispatcher" : { + "file" : "MyCPAN/Indexer/NullTester.pm" + }, + "MyCPAN::Indexer::Queue" : { + "file" : "MyCPAN/Indexer/Queue.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::Reporter::AsYAML" : { + "file" : "MyCPAN/Indexer/Reporter/AsYAML.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::Reporter::Base" : { + "file" : "MyCPAN/Indexer/Reporter/Base.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::TestCensus" : { + "file" : "MyCPAN/Indexer/TestCensus.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::Tutorial" : { + "file" : "MyCPAN/Indexer/Tutorial.pm", + "version" : "1.28" + }, + "MyCPAN::Indexer::Worker" : { + "file" : "MyCPAN/Indexer/Worker.pm", + "version" : "1.28" + } + }, + "version" : "1.28" + }, + "Net::Domain::TLD" : { + "dist" : "Net-Domain-TLD-1.68", + "module" : "Net::Domain::TLD", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.30, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Net-Domain-TLD", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Storable" : 0 + } + } + }, + "release_status" : "stable", + "version" : "1.68", + "x_installdirs" : "site", + "x_version_from" : "lib/Net/Domain/TLD.pm" + }, + "name" : "Net::Domain::TLD", + "pathname" : "/authors/id/A/AL/ALEXP/Net-Domain-TLD-1.68.tar.gz", + "provides" : { + "Net::Domain::TLD" : { + "file" : "Net/Domain/TLD.pm", + "version" : "1.68" + } + }, + "version" : "1.68" + }, + "Net::HTTP" : { + "dist" : "Net-HTTP-6.02", + "module" : "Net::HTTP", + "mymeta" : { + "abstract" : "Low-level HTTP connection (client)", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.57_05, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Net-HTTP", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "recommends" : { + "IO::Socket::SSL" : "1.38" + }, + "requires" : { + "Compress::Raw::Zlib" : 0, + "IO::Compress::Gzip" : 0, + "IO::Select" : 0, + "IO::Socket::INET" : 0, + "perl" : "5.008008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/libwww-perl/tree/Net-HTTP/master" + }, + "x_MailingList" : "mailto:libwww@perl.org" + }, + "version" : "6.02" + }, + "name" : "Net::HTTP", + "pathname" : "G/GA/GAAS/Net-HTTP-6.02.tar.gz", + "provides" : { + "Net::HTTP" : { + "file" : "Net/HTTP.pm", + "version" : "6.02" + }, + "Net::HTTP::Methods" : { + "file" : "Net/HTTP/Methods.pm", + "version" : "6.00" + }, + "Net::HTTP::NB" : { + "file" : "Net/HTTP/NB.pm", + "version" : "6.00" + }, + "Net::HTTPS" : { + "file" : "Net/HTTPS.pm", + "version" : "6.02" + } + }, + "version" : "6.02" + }, + "Number::Compare" : { + "dist" : "Number-Compare-0.03", + "module" : "Number::Compare", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.57_05, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Number-Compare", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.03" + }, + "name" : "Number::Compare", + "pathname" : "R/RC/RCLAMP/Number-Compare-0.03.tar.gz", + "provides" : { + "Number::Compare" : { + "file" : "Number/Compare.pm", + "version" : "0.03" + } + }, + "version" : "0.03" + }, + "Object::Signature" : { + "dist" : "Object-Signature-1.05", + "module" : "Object::Signature", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "Adam Kennedy <adamk@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.64, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Object-Signature", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Digest::MD5" : "2.00", + "Storable" : "2.11", + "Test::More" : "0.47" + } + } + }, + "release_status" : "stable", + "version" : "1.05" + }, + "name" : "Object::Signature", + "pathname" : "/authors/id/A/AD/ADAMK/Object-Signature-1.05.tar.gz", + "provides" : { + "Object::Signature" : { + "file" : "Object/Signature.pm", + "version" : "1.05" + } + }, + "version" : "1.05" + }, + "PPI" : { + "dist" : "PPI-1.215", + "module" : "PPI", + "mymeta" : { + "abstract" : "Parse, Analyze and Manipulate Perl (without perl)", + "author" : [ + "Adam Kennedy <adamk@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "PPI", + "no_index" : { + "directory" : [ + "inc", + "t", + "xt" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Class::Inspector" : "1.22", + "ExtUtils::MakeMaker" : "6.42", + "File::Remove" : "1.42", + "Test::More" : "0.86", + "Test::NoWarnings" : "0.084", + "Test::Object" : "0.07", + "Test::SubCalls" : "1.07" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Clone" : "0.30", + "Digest::MD5" : "2.35", + "File::Spec" : "0.84", + "IO::String" : "1.07", + "List::MoreUtils" : "0.16", + "List::Util" : "1.20", + "Params::Util" : "1.00", + "Storable" : "2.17", + "Task::Weaken" : 0, + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://svn.ali.as/cpan/trunk/PPI" + }, + "x_ChangeLog" : "http://fisheye2.atlassian.com/changelog/cpan/trunk/PPI" + }, + "version" : "1.215", + "x_module_name" : "PPI" + }, + "name" : "PPI", + "pathname" : "/authors/id/A/AD/ADAMK/PPI-1.215.tar.gz", + "provides" : { + "PPI" : { + "file" : "PPI.pm", + "version" : "1.215" + }, + "PPI::Cache" : { + "file" : "PPI/Cache.pm", + "version" : "1.215" + }, + "PPI::Document" : { + "file" : "PPI/Document.pm", + "version" : "1.215" + }, + "PPI::Document::File" : { + "file" : "PPI/Document/File.pm", + "version" : "1.215" + }, + "PPI::Document::Fragment" : { + "file" : "PPI/Document/Fragment.pm", + "version" : "1.215" + }, + "PPI::Document::Normalized" : { + "file" : "PPI/Document/Normalized.pm", + "version" : "1.215" + }, + "PPI::Dumper" : { + "file" : "PPI/Dumper.pm", + "version" : "1.215" + }, + "PPI::Element" : { + "file" : "PPI/Element.pm", + "version" : "1.215" + }, + "PPI::Exception" : { + "file" : "PPI/Exception.pm", + "version" : "1.215" + }, + "PPI::Exception::ParserRejection" : { + "file" : "PPI/Exception/ParserRejection.pm", + "version" : "1.215" + }, + "PPI::Exception::ParserTimeout" : { + "file" : "PPI/Exception/ParserTimeout.pm", + "version" : "1.215" + }, + "PPI::Find" : { + "file" : "PPI/Find.pm", + "version" : "1.215" + }, + "PPI::Lexer" : { + "file" : "PPI/Lexer.pm", + "version" : "1.215" + }, + "PPI::Node" : { + "file" : "PPI/Node.pm", + "version" : "1.215" + }, + "PPI::Normal" : { + "file" : "PPI/Normal.pm", + "version" : "1.215" + }, + "PPI::Normal::Standard" : { + "file" : "PPI/Normal/Standard.pm", + "version" : "1.215" + }, + "PPI::Statement" : { + "file" : "PPI/Statement.pm", + "version" : "1.215" + }, + "PPI::Statement::Break" : { + "file" : "PPI/Statement/Break.pm", + "version" : "1.215" + }, + "PPI::Statement::Compound" : { + "file" : "PPI/Statement/Compound.pm", + "version" : "1.215" + }, + "PPI::Statement::Data" : { + "file" : "PPI/Statement/Data.pm", + "version" : "1.215" + }, + "PPI::Statement::End" : { + "file" : "PPI/Statement/End.pm", + "version" : "1.215" + }, + "PPI::Statement::Expression" : { + "file" : "PPI/Statement/Expression.pm", + "version" : "1.215" + }, + "PPI::Statement::Given" : { + "file" : "PPI/Statement/Given.pm", + "version" : "1.215" + }, + "PPI::Statement::Include" : { + "file" : "PPI/Statement/Include.pm", + "version" : "1.215" + }, + "PPI::Statement::Include::Perl6" : { + "file" : "PPI/Statement/Include/Perl6.pm", + "version" : "1.215" + }, + "PPI::Statement::Null" : { + "file" : "PPI/Statement/Null.pm", + "version" : "1.215" + }, + "PPI::Statement::Package" : { + "file" : "PPI/Statement/Package.pm", + "version" : "1.215" + }, + "PPI::Statement::Scheduled" : { + "file" : "PPI/Statement/Scheduled.pm", + "version" : "1.215" + }, + "PPI::Statement::Sub" : { + "file" : "PPI/Statement/Sub.pm", + "version" : "1.215" + }, + "PPI::Statement::Unknown" : { + "file" : "PPI/Statement/Unknown.pm", + "version" : "1.215" + }, + "PPI::Statement::UnmatchedBrace" : { + "file" : "PPI/Statement/UnmatchedBrace.pm", + "version" : "1.215" + }, + "PPI::Statement::Variable" : { + "file" : "PPI/Statement/Variable.pm", + "version" : "1.215" + }, + "PPI::Statement::When" : { + "file" : "PPI/Statement/When.pm", + "version" : "1.215" + }, + "PPI::Structure" : { + "file" : "PPI/Structure.pm", + "version" : "1.215" + }, + "PPI::Structure::Block" : { + "file" : "PPI/Structure/Block.pm", + "version" : "1.215" + }, + "PPI::Structure::Condition" : { + "file" : "PPI/Structure/Condition.pm", + "version" : "1.215" + }, + "PPI::Structure::Constructor" : { + "file" : "PPI/Structure/Constructor.pm", + "version" : "1.215" + }, + "PPI::Structure::For" : { + "file" : "PPI/Structure/For.pm", + "version" : "1.215" + }, + "PPI::Structure::Given" : { + "file" : "PPI/Structure/Given.pm", + "version" : "1.215" + }, + "PPI::Structure::List" : { + "file" : "PPI/Structure/List.pm", + "version" : "1.215" + }, + "PPI::Structure::Subscript" : { + "file" : "PPI/Structure/Subscript.pm", + "version" : "1.215" + }, + "PPI::Structure::Unknown" : { + "file" : "PPI/Structure/Unknown.pm", + "version" : "1.215" + }, + "PPI::Structure::When" : { + "file" : "PPI/Structure/When.pm", + "version" : "1.215" + }, + "PPI::Token" : { + "file" : "PPI/Token.pm", + "version" : "1.215" + }, + "PPI::Token::ArrayIndex" : { + "file" : "PPI/Token/ArrayIndex.pm", + "version" : "1.215" + }, + "PPI::Token::Attribute" : { + "file" : "PPI/Token/Attribute.pm", + "version" : "1.215" + }, + "PPI::Token::BOM" : { + "file" : "PPI/Token/BOM.pm", + "version" : "1.215" + }, + "PPI::Token::Cast" : { + "file" : "PPI/Token/Cast.pm", + "version" : "1.215" + }, + "PPI::Token::Comment" : { + "file" : "PPI/Token/Comment.pm", + "version" : "1.215" + }, + "PPI::Token::DashedWord" : { + "file" : "PPI/Token/DashedWord.pm", + "version" : "1.215" + }, + "PPI::Token::Data" : { + "file" : "PPI/Token/Data.pm", + "version" : "1.215" + }, + "PPI::Token::End" : { + "file" : "PPI/Token/End.pm", + "version" : "1.215" + }, + "PPI::Token::HereDoc" : { + "file" : "PPI/Token/HereDoc.pm", + "version" : "1.215" + }, + "PPI::Token::Label" : { + "file" : "PPI/Token/Label.pm", + "version" : "1.215" + }, + "PPI::Token::Magic" : { + "file" : "PPI/Token/Magic.pm", + "version" : "1.215" + }, + "PPI::Token::Number" : { + "file" : "PPI/Token/Number.pm", + "version" : "1.215" + }, + "PPI::Token::Number::Binary" : { + "file" : "PPI/Token/Number/Binary.pm", + "version" : "1.215" + }, + "PPI::Token::Number::Exp" : { + "file" : "PPI/Token/Number/Exp.pm", + "version" : "1.215" + }, + "PPI::Token::Number::Float" : { + "file" : "PPI/Token/Number/Float.pm", + "version" : "1.215" + }, + "PPI::Token::Number::Hex" : { + "file" : "PPI/Token/Number/Hex.pm", + "version" : "1.215" + }, + "PPI::Token::Number::Octal" : { + "file" : "PPI/Token/Number/Octal.pm", + "version" : "1.215" + }, + "PPI::Token::Number::Version" : { + "file" : "PPI/Token/Number/Version.pm", + "version" : "1.215" + }, + "PPI::Token::Operator" : { + "file" : "PPI/Token/Operator.pm", + "version" : "1.215" + }, + "PPI::Token::Pod" : { + "file" : "PPI/Token/Pod.pm", + "version" : "1.215" + }, + "PPI::Token::Prototype" : { + "file" : "PPI/Token/Prototype.pm", + "version" : "1.215" + }, + "PPI::Token::Quote" : { + "file" : "PPI/Token/Quote.pm", + "version" : "1.215" + }, + "PPI::Token::Quote::Double" : { + "file" : "PPI/Token/Quote/Double.pm", + "version" : "1.215" + }, + "PPI::Token::Quote::Interpolate" : { + "file" : "PPI/Token/Quote/Interpolate.pm", + "version" : "1.215" + }, + "PPI::Token::Quote::Literal" : { + "file" : "PPI/Token/Quote/Literal.pm", + "version" : "1.215" + }, + "PPI::Token::Quote::Single" : { + "file" : "PPI/Token/Quote/Single.pm", + "version" : "1.215" + }, + "PPI::Token::QuoteLike" : { + "file" : "PPI/Token/QuoteLike.pm", + "version" : "1.215" + }, + "PPI::Token::QuoteLike::Backtick" : { + "file" : "PPI/Token/QuoteLike/Backtick.pm", + "version" : "1.215" + }, + "PPI::Token::QuoteLike::Command" : { + "file" : "PPI/Token/QuoteLike/Command.pm", + "version" : "1.215" + }, + "PPI::Token::QuoteLike::Readline" : { + "file" : "PPI/Token/QuoteLike/Readline.pm", + "version" : "1.215" + }, + "PPI::Token::QuoteLike::Regexp" : { + "file" : "PPI/Token/QuoteLike/Regexp.pm", + "version" : "1.215" + }, + "PPI::Token::QuoteLike::Words" : { + "file" : "PPI/Token/QuoteLike/Words.pm", + "version" : "1.215" + }, + "PPI::Token::Regexp" : { + "file" : "PPI/Token/Regexp.pm", + "version" : "1.215" + }, + "PPI::Token::Regexp::Match" : { + "file" : "PPI/Token/Regexp/Match.pm", + "version" : "1.215" + }, + "PPI::Token::Regexp::Substitute" : { + "file" : "PPI/Token/Regexp/Substitute.pm", + "version" : "1.215" + }, + "PPI::Token::Regexp::Transliterate" : { + "file" : "PPI/Token/Regexp/Transliterate.pm", + "version" : "1.215" + }, + "PPI::Token::Separator" : { + "file" : "PPI/Token/Separator.pm", + "version" : "1.215" + }, + "PPI::Token::Structure" : { + "file" : "PPI/Token/Structure.pm", + "version" : "1.215" + }, + "PPI::Token::Symbol" : { + "file" : "PPI/Token/Symbol.pm", + "version" : "1.215" + }, + "PPI::Token::Unknown" : { + "file" : "PPI/Token/Unknown.pm", + "version" : "1.215" + }, + "PPI::Token::Whitespace" : { + "file" : "PPI/Token/Whitespace.pm", + "version" : "1.215" + }, + "PPI::Token::Word" : { + "file" : "PPI/Token/Word.pm", + "version" : "1.215" + }, + "PPI::Tokenizer" : { + "file" : "PPI/Tokenizer.pm", + "version" : "1.215" + }, + "PPI::Transform" : { + "file" : "PPI/Transform.pm", + "version" : "1.215" + }, + "PPI::Transform::UpdateCopyright" : { + "file" : "PPI/Transform/UpdateCopyright.pm", + "version" : "1.215" + }, + "PPI::Util" : { + "file" : "PPI/Util.pm", + "version" : "1.215" + }, + "PPI::XSAccessor" : { + "file" : "PPI/XSAccessor.pm", + "version" : "1.215" + } + }, + "version" : "1.215" + }, + "Package::DeprecationManager" : { + "dist" : "Package-DeprecationManager-0.11", + "module" : "Package::DeprecationManager", + "mymeta" : { + "abstract" : "Manage deprecation warnings for your distribution", + "author" : [ + "Dave Rolsky <autarch@urth.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.200006, CPAN::Meta::Converter version 2.110930, CPAN::Meta::Converter version 2.112150", + "license" : [ + "artistic_2" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Package-DeprecationManager", + "prereqs" : { + "build" : { + "requires" : { + "Test::Fatal" : 0, + "Test::More" : "0.88", + "Test::Requires" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.30" + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "List::MoreUtils" : 0, + "Params::Util" : 0, + "Sub::Install" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Package-DeprecationManager" + }, + "repository" : { + "type" : "git", + "url" : "git://git.moose.perl.org/Package-DeprecationManager.git" + } + }, + "version" : "0.11" + }, + "name" : "Package::DeprecationManager", + "pathname" : "D/DR/DROLSKY/Package-DeprecationManager-0.11.tar.gz", + "provides" : { + "Package::DeprecationManager" : { + "file" : "Package/DeprecationManager.pm", + "version" : "0.11" + } + }, + "version" : "0.11" + }, + "Package::Stash" : { + "dist" : "Package-Stash-0.33", + "module" : "Package::Stash", + "mymeta" : { + "abstract" : "routines for manipulating stashes", + "author" : [ + "Jesse Luehrs <doy at tozt dot net>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.300002, CPAN::Meta::Converter version 2.110440, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Package-Stash", + "prereqs" : { + "build" : { + "requires" : { + "Test::Fatal" : 0, + "Test::More" : "0.88", + "Test::Requires" : 0 + } + }, + "configure" : { + "requires" : { + "Dist::CheckConflicts" : "0.02", + "ExtUtils::MakeMaker" : "6.30" + } + }, + "runtime" : { + "recommends" : { + "Package::Stash::XS" : "0.24" + }, + "requires" : { + "Dist::CheckConflicts" : "0.02", + "Package::DeprecationManager" : 0, + "Package::Stash::XS" : "0.24", + "Scalar::Util" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "type" : "git", + "url" : "git://github.com/doy/package-stash.git" + } + }, + "version" : "0.33", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "@DOY/TestMoreDoneTesting", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@DOY/GatherDir", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@DOY/PruneCruft", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@DOY/ManifestSkip", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@DOY/MetaYAML", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@DOY/License", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@DOY/Readme", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@DOY/ExtraTests", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@DOY/ExecDir", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@DOY/ShareDir", + "version" : "4.300002" + }, + { + "class" : "inc::MMPackageStash", + "name" : "@DOY/=inc::MMPackageStash", + "version" : null + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@DOY/Manifest", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::TestRelease", + "name" : "@DOY/TestRelease", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@DOY/ConfirmRelease", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@DOY/MetaConfig", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@DOY/MetaJSON", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::NextRelease", + "name" : "@DOY/NextRelease", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::CheckChangesHasContent", + "name" : "@DOY/CheckChangesHasContent", + "version" : "0.003" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@DOY/PkgVersion", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::PodCoverageTests", + "name" : "@DOY/PodCoverageTests", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@DOY/PodSyntaxTests", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::NoTabsTests", + "name" : "@DOY/NoTabsTests", + "version" : "0.01" + }, + { + "class" : "Dist::Zilla::Plugin::EOLTests", + "name" : "@DOY/EOLTests", + "version" : "0.02" + }, + { + "class" : "Dist::Zilla::Plugin::CompileTests", + "name" : "@DOY/CompileTests", + "version" : "1.110930" + }, + { + "class" : "Dist::Zilla::Plugin::Repository", + "name" : "@DOY/Repository", + "version" : "0.18" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Check", + "name" : "@DOY/Git::Check", + "version" : "1.111590" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Tag", + "name" : "@DOY/Git::Tag", + "version" : "1.111590" + }, + { + "class" : "Dist::Zilla::Plugin::Git::NextVersion", + "name" : "@DOY/Git::NextVersion", + "version" : "1.111590" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@DOY/PodWeaver", + "version" : "3.101641" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@DOY/UploadToCPAN", + "version" : "4.300002" + }, + { + "class" : "inc::DistMeta", + "name" : "=inc::DistMeta", + "version" : null + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "runtime", + "type" : "requires" + } + }, + "name" : "Prereqs", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "runtime", + "type" : "recommends" + } + }, + "name" : "RuntimeRecommends", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "TestRequires", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "develop", + "type" : "requires" + } + }, + "name" : "DevelopRequires", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::Conflicts", + "name" : "Conflicts", + "version" : "0.08" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":IncModules", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "4.300002" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":MainModule", + "version" : "4.300002" + } + ], + "zilla" : { + "class" : "Dist::Zilla::Dist::Builder", + "config" : { + "is_trial" : "0" + }, + "version" : "4.300002" + } + }, + "x_conflicts" : { + "Class::MOP" : "1.08", + "MooseX::Method::Signatures" : "0.36", + "MooseX::Role::WithOverloading" : "0.08", + "namespace::clean" : "0.18" + } + }, + "name" : "Package::Stash", + "pathname" : "D/DO/DOY/Package-Stash-0.33.tar.gz", + "provides" : { + "Package::Stash" : { + "file" : "Package/Stash.pm", + "version" : "0.33" + }, + "Package::Stash::PP" : { + "file" : "Package/Stash/PP.pm", + "version" : "0.33" + } + }, + "version" : "0.33" + }, + "Package::Stash::XS" : { + "dist" : "Package-Stash-XS-0.25", + "module" : "Package::Stash::XS", + "mymeta" : { + "abstract" : "faster and more correct implementation of the Package::Stash API", + "author" : [ + "Jesse Luehrs <doy at tozt dot net>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.200012, CPAN::Meta::Converter version 2.110440, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Package-Stash-XS", + "prereqs" : { + "build" : { + "requires" : { + "Test::Fatal" : 0, + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.30" + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "type" : "git", + "url" : "git://github.com/doy/package-stash-xs.git" + } + }, + "version" : "0.25", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "@DOY/TestMoreDoneTesting", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@DOY/GatherDir", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@DOY/PruneCruft", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@DOY/ManifestSkip", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@DOY/MetaYAML", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@DOY/License", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@DOY/Readme", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@DOY/ExtraTests", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@DOY/ExecDir", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@DOY/ShareDir", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::MakeMaker", + "name" : "@DOY/MakeMaker", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@DOY/Manifest", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::TestRelease", + "name" : "@DOY/TestRelease", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@DOY/ConfirmRelease", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@DOY/MetaConfig", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@DOY/MetaJSON", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::NextRelease", + "name" : "@DOY/NextRelease", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::CheckChangesHasContent", + "name" : "@DOY/CheckChangesHasContent", + "version" : "0.003" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@DOY/PkgVersion", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::PodCoverageTests", + "name" : "@DOY/PodCoverageTests", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@DOY/PodSyntaxTests", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::NoTabsTests", + "name" : "@DOY/NoTabsTests", + "version" : "0.01" + }, + { + "class" : "Dist::Zilla::Plugin::EOLTests", + "name" : "@DOY/EOLTests", + "version" : "0.02" + }, + { + "class" : "Dist::Zilla::Plugin::CompileTests", + "name" : "@DOY/CompileTests", + "version" : "1.110930" + }, + { + "class" : "Dist::Zilla::Plugin::Repository", + "name" : "@DOY/Repository", + "version" : "0.18" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Check", + "name" : "@DOY/Git::Check", + "version" : "1.111590" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Tag", + "name" : "@DOY/Git::Tag", + "version" : "1.111590" + }, + { + "class" : "Dist::Zilla::Plugin::Git::NextVersion", + "name" : "@DOY/Git::NextVersion", + "version" : "1.111590" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@DOY/PodWeaver", + "version" : "3.101641" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@DOY/UploadToCPAN", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "runtime", + "type" : "requires" + } + }, + "name" : "Prereqs", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "TestRequires", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "develop", + "type" : "requires" + } + }, + "name" : "DevelopRequires", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::PruneFiles", + "name" : "PruneFiles", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":IncModules", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "4.200012" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":MainModule", + "version" : "4.200012" + } + ], + "zilla" : { + "class" : "Dist::Zilla::Dist::Builder", + "config" : { + "is_trial" : "0" + }, + "version" : "4.200012" + } + } + }, + "name" : "Package::Stash::XS", + "pathname" : "D/DO/DOY/Package-Stash-XS-0.25.tar.gz", + "provides" : { + "Package::Stash::XS" : { + "file" : "Package/Stash/XS.pm", + "version" : "0.25" + } + }, + "version" : "0.25" + }, + "Parallel::ForkManager" : { + "dist" : "Parallel-ForkManager-0.7.9", + "module" : "Parallel::ForkManager", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.48, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Parallel-ForkManager", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "0.7.9" + }, + "name" : "Parallel::ForkManager", + "pathname" : "D/DL/DLUX/Parallel-ForkManager-0.7.9.tar.gz", + "provides" : { + "Parallel::ForkManager" : { + "file" : "Parallel/ForkManager.pm", + "version" : "v0.7.9" + } + }, + "version" : "v0.7.9" + }, + "Params::Classify" : { + "dist" : "Params-Classify-0.013", + "module" : "Params::Classify", + "mymeta" : { + "abstract" : "argument type classification", + "author" : [ + "Andrew Main (Zefram) <zefram@fysh.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Params-Classify", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::ParseXS" : "2.2006", + "Module::Build" : 0, + "Test::More" : 0, + "perl" : "5.006001", + "strict" : 0, + "warnings" : 0 + } + }, + "configure" : { + "requires" : { + "Module::Build" : 0, + "perl" : "5.006001", + "strict" : 0, + "warnings" : 0 + } + }, + "runtime" : { + "recommends" : { + "XSLoader" : 0 + }, + "requires" : { + "Exporter" : 0, + "Scalar::Util" : "1.01", + "parent" : 0, + "perl" : "5.006001", + "strict" : 0, + "warnings" : 0 + } + } + }, + "provides" : { + "Params::Classify" : { + "file" : "lib/Params/Classify.pm", + "version" : "0.013" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.013" + }, + "name" : "Params::Classify", + "pathname" : "Z/ZE/ZEFRAM/Params-Classify-0.013.tar.gz", + "provides" : { + "Params::Classify" : { + "file" : "Params/Classify.pm", + "version" : "0.013" + } + }, + "version" : "0.013" + }, + "Params::Util" : { + "dist" : "Params-Util-1.03", + "module" : "Params::Util", + "mymeta" : { + "abstract" : "Simple, compact and correct param-checking functions", + "author" : [ + "Adam Kennedy <adamk@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Params-Util", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.52", + "File::Spec" : "0.80", + "Test::More" : "0.42" + } + }, + "configure" : { + "requires" : { + "ExtUtils::CBuilder" : "0.27", + "ExtUtils::MakeMaker" : "6.52" + } + }, + "runtime" : { + "requires" : { + "Scalar::Util" : "1.18", + "perl" : "5.00503" + } + } + }, + "release_status" : "stable", + "version" : "1.03" + }, + "name" : "Params::Util", + "pathname" : "/authors/id/A/AD/ADAMK/Params-Util-1.03.tar.gz", + "provides" : { + "Params::Util" : { + "file" : "Params/Util.pm", + "version" : "1.03" + } + }, + "version" : "1.03" + }, + "Params::Validate" : { + "dist" : "Params-Validate-1.00", + "module" : "Params::Validate", + "mymeta" : { + "abstract" : "Validate method/function parameters", + "author" : [ + "Dave Rolsky, <autarch@urth.org> and Ilya Martynov <ilya@martynov.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "artistic_2" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Params-Validate", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::CBuilder" : 0, + "Module::Build" : "0.3601", + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "Module::Build" : "0.3601" + } + }, + "runtime" : { + "requires" : { + "Attribute::Handlers" : "0.79", + "Scalar::Util" : "1.10", + "perl" : "v5.8.1" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Params-Validate" + }, + "repository" : { + "type" : "git", + "url" : "git://git.urth.org/Params-Validate.git" + } + }, + "version" : "1.00" + }, + "name" : "Params::Validate", + "pathname" : "D/DR/DROLSKY/Params-Validate-1.00.tar.gz", + "provides" : { + "Attribute::Params::Validate" : { + "file" : "Attribute/Params/Validate.pm", + "version" : "1.07" + }, + "Params::Validate" : { + "file" : "Params/Validate.pm", + "version" : "1.00" + } + }, + "version" : "1.00" + }, + "Path::Class" : { + "dist" : "Path-Class-0.24", + "module" : "Path::Class", + "mymeta" : { + "abstract" : "Cross-platform path specification manipulation", + "author" : [ + "Ken Williams <kwilliams@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Path-Class", + "prereqs" : { + "build" : { + "requires" : { + "Module::Build" : "0.3601", + "Test" : 0, + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.30", + "Module::Build" : "0.3601" + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Cwd" : 0, + "Exporter" : 0, + "File::Path" : 0, + "File::Spec" : "0.87", + "File::Temp" : 0, + "File::stat" : 0, + "IO::Dir" : 0, + "IO::File" : 0, + "overload" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=Path-Class" + }, + "repository" : { + "url" : "http://perl-path-class.googlecode.com/svn/trunk" + } + }, + "version" : "0.24" + }, + "name" : "Path::Class", + "pathname" : "K/KW/KWILLIAMS/Path-Class-0.24.tar.gz", + "provides" : { + "Path::Class" : { + "file" : "Path/Class.pm", + "version" : "0.24" + }, + "Path::Class::Dir" : { + "file" : "Path/Class/Dir.pm", + "version" : "0.24" + }, + "Path::Class::Entity" : { + "file" : "Path/Class/Entity.pm", + "version" : "0.24" + }, + "Path::Class::File" : { + "file" : "Path/Class/File.pm", + "version" : "0.24" + } + }, + "version" : "0.24" + }, + "Probe::Perl" : { + "dist" : "Probe-Perl-0.01", + "module" : "Probe::Perl", + "mymeta" : { + "abstract" : "Information about the currently running perl", + "author" : [ + "Randy W. Sims <randys@thepierianspring.org>", + "Based partly on code from the Module::Build project, by Ken Williams\n<kwilliams@cpan.org> and others." + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Probe-Perl", + "prereqs" : { + "build" : { + "requires" : { + "Test" : 0 + } + }, + "runtime" : { + "requires" : { + "Config" : 0 + } + } + }, + "provides" : { + "Probe::Perl" : { + "file" : "lib/Probe/Perl.pm", + "version" : "0.01" + } + }, + "release_status" : "stable", + "version" : "0.01" + }, + "name" : "Probe::Perl", + "pathname" : "K/KW/KWILLIAMS/Probe-Perl-0.01.tar.gz", + "provides" : { + "Probe::Perl" : { + "file" : "Probe/Perl.pm", + "version" : "0.01" + } + }, + "version" : "0.01" + }, + "Readonly" : { + "dist" : "Readonly-1.03", + "module" : "Readonly", + "mymeta" : { + "abstract" : "Facility for creating read-only scalars, arrays, hashes.", + "author" : [ + "Eric J. Roode <roode@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Readonly", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "1.03" + }, + "name" : "Readonly", + "pathname" : "R/RO/ROODE/Readonly-1.03.tar.gz", + "provides" : { + "Readonly" : { + "file" : "Readonly.pm", + "version" : "1.03" + }, + "Readonly::Array" : { + "file" : "Readonly.pm" + }, + "Readonly::Hash" : { + "file" : "Readonly.pm" + }, + "Readonly::Scalar" : { + "file" : "Readonly.pm" + } + }, + "version" : "1.03" + }, + "Regexp::Common" : { + "dist" : "Regexp-Common-2011121001", + "module" : "Regexp::Common", + "mymeta" : { + "abstract" : "Provide commonly requested regular expressions", + "author" : [ + "Abigail <regexp-common@abigail.be>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "keywords" : [ + "regular expression", + "pattern" + ], + "license" : [ + "mit" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Regexp-Common", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0, + "strict" : 0 + } + }, + "runtime" : { + "requires" : { + "perl" : "5.00473", + "strict" : 0, + "vars" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "type" : "git", + "url" : "git://github.com/Abigail/Regexp--Common.git" + } + }, + "version" : "2011121001", + "x_test_requires" : { + "strict" : "0" + } + }, + "name" : "Regexp::Common", + "pathname" : "A/AB/ABIGAIL/Regexp-Common-2011121001.tar.gz", + "provides" : { + "Regexp::Common" : { + "file" : "Regexp/Common.pm", + "version" : "2011121001" + }, + "Regexp::Common::CC" : { + "file" : "Regexp/Common/CC.pm", + "version" : "2010010201" + }, + "Regexp::Common::Entry" : { + "file" : "Regexp/Common.pm" + }, + "Regexp::Common::SEN" : { + "file" : "Regexp/Common/SEN.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI" : { + "file" : "Regexp/Common/URI.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::RFC1035" : { + "file" : "Regexp/Common/URI/RFC1035.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::RFC1738" : { + "file" : "Regexp/Common/URI/RFC1738.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::RFC1808" : { + "file" : "Regexp/Common/URI/RFC1808.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::RFC2384" : { + "file" : "Regexp/Common/URI/RFC2384.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::RFC2396" : { + "file" : "Regexp/Common/URI/RFC2396.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::RFC2806" : { + "file" : "Regexp/Common/URI/RFC2806.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::fax" : { + "file" : "Regexp/Common/URI/fax.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::file" : { + "file" : "Regexp/Common/URI/file.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::ftp" : { + "file" : "Regexp/Common/URI/ftp.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::gopher" : { + "file" : "Regexp/Common/URI/gopher.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::http" : { + "file" : "Regexp/Common/URI/http.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::news" : { + "file" : "Regexp/Common/URI/news.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::pop" : { + "file" : "Regexp/Common/URI/pop.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::prospero" : { + "file" : "Regexp/Common/URI/prospero.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::tel" : { + "file" : "Regexp/Common/URI/tel.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::telnet" : { + "file" : "Regexp/Common/URI/telnet.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::tv" : { + "file" : "Regexp/Common/URI/tv.pm", + "version" : "2010010201" + }, + "Regexp::Common::URI::wais" : { + "file" : "Regexp/Common/URI/wais.pm", + "version" : "2010010201" + }, + "Regexp::Common::balanced" : { + "file" : "Regexp/Common/balanced.pm", + "version" : "2010010201" + }, + "Regexp::Common::comment" : { + "file" : "Regexp/Common/comment.pm", + "version" : "2010010201" + }, + "Regexp::Common::delimited" : { + "file" : "Regexp/Common/delimited.pm", + "version" : "2010010201" + }, + "Regexp::Common::lingua" : { + "file" : "Regexp/Common/lingua.pm", + "version" : "2010010201" + }, + "Regexp::Common::list" : { + "file" : "Regexp/Common/list.pm", + "version" : "2010010201" + }, + "Regexp::Common::net" : { + "file" : "Regexp/Common/net.pm", + "version" : "2010010201" + }, + "Regexp::Common::number" : { + "file" : "Regexp/Common/number.pm", + "version" : "2010010201" + }, + "Regexp::Common::profanity" : { + "file" : "Regexp/Common/profanity.pm", + "version" : "2010010201" + }, + "Regexp::Common::whitespace" : { + "file" : "Regexp/Common/whitespace.pm", + "version" : "2010010201" + }, + "Regexp::Common::zip" : { + "file" : "Regexp/Common/zip.pm", + "version" : "2010010201" + } + }, + "version" : "2011121001" + }, + "Return::Value" : { + "dist" : "Return-Value-1.666001", + "module" : "Return::Value", + "mymeta" : { + "abstract" : "Polymorphic Return Values", + "author" : [ + "Casey West <casey@geeknest.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.50, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Return-Value", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : "0.47" + } + } + }, + "release_status" : "stable", + "version" : "1.666001" + }, + "name" : "Return::Value", + "pathname" : "R/RJ/RJBS/Return-Value-1.666001.tar.gz", + "provides" : { + "Return::Value" : { + "file" : "Return/Value.pm", + "version" : "1.666001" + } + }, + "version" : "1.666001" + }, + "SQL::Abstract" : { + "dist" : "SQL-Abstract-1.72", + "module" : "SQL::Abstract", + "mymeta" : { + "abstract" : "Generate SQL from Perl data structures", + "author" : [ + "Nathan Wiger <nate@wiger.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "SQL-Abstract", + "no_index" : { + "directory" : [ + "examples", + "inc", + "t" + ], + "package" : [ + "DBIx::Class::Storage::Debug::PrettyPrint" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Storable" : 0, + "Test::Deep" : "0.106", + "Test::Exception" : 0, + "Test::More" : "0.92", + "Test::Warn" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Class::Accessor::Grouped" : "0.10002", + "Getopt::Long::Descriptive" : "0.086", + "Hash::Merge" : "0.12", + "List::Util" : 0, + "Scalar::Util" : 0, + "Storable" : 0, + "Test::Deep" : "0.106", + "Test::Exception" : 0, + "Test::More" : "0.92", + "Test::Warn" : 0, + "perl" : "5.006002" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=SQL-Abstract" + }, + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://git.shadowcat.co.uk/dbsrgits/SQL-Abstract.git" + } + }, + "version" : "1.72" + }, + "name" : "SQL::Abstract", + "pathname" : "F/FR/FREW/SQL-Abstract-1.72.tar.gz", + "provides" : { + "DBIx::Class::Storage::Debug::PrettyPrint" : { + "file" : "DBIx/Class/Storage/Debug/PrettyPrint.pm" + }, + "SQL::Abstract" : { + "file" : "SQL/Abstract.pm", + "version" : "1.72" + }, + "SQL::Abstract::Test" : { + "file" : "SQL/Abstract/Test.pm" + }, + "SQL::Abstract::Tree" : { + "file" : "SQL/Abstract/Tree.pm" + } + }, + "version" : "1.72" + }, + "Scope::Guard" : { + "dist" : "Scope-Guard-0.20", + "module" : "Scope::Guard", + "mymeta" : { + "abstract" : "lexically-scoped resource management", + "author" : [ + "chocolateboy <chocolate@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Scope-Guard", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "perl" : "5.006001" + } + } + }, + "release_status" : "stable", + "version" : "0.20" + }, + "name" : "Scope::Guard", + "pathname" : "/authors/id/C/CH/CHOCOLATE/Scope-Guard-0.20.tar.gz", + "provides" : { + "Scope::Guard" : { + "file" : "Scope/Guard.pm", + "version" : "0.20" + } + }, + "version" : "0.20" + }, + "Sort::Key" : { + "dist" : "Sort-Key-1.28", + "module" : "Sort::Key", + "mymeta" : { + "abstract" : "the fastest way to sort anything in Perl", + "author" : [ + "Salvador Fandino <sfandino@yahoo.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.32, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Sort-Key", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : "0.54" + } + } + }, + "release_status" : "stable", + "version" : "1.28" + }, + "name" : "Sort::Key", + "pathname" : "S/SA/SALVA/Sort-Key-1.28.tar.gz", + "provides" : { + "Sort::Key" : { + "file" : "Sort/Key.pm", + "version" : "1.28" + }, + "Sort::Key::Maker" : { + "file" : "Sort/Key/Maker.pm", + "version" : "0.02" + }, + "Sort::Key::Multi" : { + "file" : "Sort/Key/Multi.pm", + "version" : "1.25" + }, + "Sort::Key::Natural" : { + "file" : "Sort/Key/Natural.pm", + "version" : "0.03" + }, + "Sort::Key::Register" : { + "file" : "Sort/Key/Register.pm", + "version" : "0.14" + } + }, + "version" : "1.28" + }, + "Spiffy" : { + "dist" : "Spiffy-0.30", + "module" : "Spiffy", + "mymeta" : { + "abstract" : "Spiffy Perl Interface Framework For You", + "author" : [ + "Ingy döt Net <ingy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.54, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Spiffy", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Filter::Util::Call" : 0, + "Scalar::Util" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.25" + }, + "name" : "Spiffy", + "pathname" : "I/IN/INGY/Spiffy-0.30.tar.gz", + "provides" : { + "Spiffy" : { + "file" : "Spiffy.pm", + "version" : "0.30" + } + }, + "version" : "0.30" + }, + "Statistics::Distributions" : { + "dist" : "Statistics-Distributions-1.02", + "module" : "Statistics::Distributions", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Statistics-Distributions", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "1.02" + }, + "name" : "Statistics::Distributions", + "pathname" : "M/MI/MIKEK/Statistics-Distributions-1.02.tar.gz", + "provides" : { + "Statistics::Distributions" : { + "file" : "Statistics/Distributions.pm", + "version" : "1.02" + } + }, + "version" : "1.02" + }, + "String::CRC32" : { + "dist" : "String-CRC32-1.4", + "module" : "String::CRC32", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "String-CRC32", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "1.4" + }, + "name" : "String::CRC32", + "pathname" : "S/SO/SOENKE/String-CRC32-1.4.tar.gz", + "provides" : { + "String::CRC32" : { + "file" : "String/CRC32.pm", + "version" : "1.4" + } + }, + "version" : "1.4" + }, + "String::RewritePrefix" : { + "dist" : "String-RewritePrefix-0.006", + "module" : "String::RewritePrefix", + "mymeta" : { + "abstract" : "rewrite strings based on a set of known prefixes", + "author" : [ + "Ricardo Signes <rjbs@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.102342, CPAN::Meta::Converter version 2.102400, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "String-RewritePrefix", + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : "0.96" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.31" + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Sub::Exporter" : "0.972" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "type" : "git", + "url" : "git://git.codesimply.com/String-RewritePrefix.git" + } + }, + "version" : "0.006", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@RJBS/@Basic/GatherDir", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@RJBS/@Basic/PruneCruft", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@RJBS/@Basic/ManifestSkip", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@RJBS/@Basic/MetaYAML", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@RJBS/@Basic/License", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@RJBS/@Basic/Readme", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@RJBS/@Basic/ExtraTests", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@RJBS/@Basic/ExecDir", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@RJBS/@Basic/ShareDir", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::MakeMaker", + "name" : "@RJBS/@Basic/MakeMaker", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@RJBS/@Basic/Manifest", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::TestRelease", + "name" : "@RJBS/@Basic/TestRelease", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@RJBS/@Basic/ConfirmRelease", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@RJBS/@Basic/UploadToCPAN", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::AutoPrereqs", + "name" : "@RJBS/AutoPrereqs", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::Git::NextVersion", + "name" : "@RJBS/Git::NextVersion", + "version" : "1.102810" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@RJBS/PkgVersion", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@RJBS/MetaConfig", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@RJBS/MetaJSON", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::NextRelease", + "name" : "@RJBS/NextRelease", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@RJBS/PodSyntaxTests", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::Repository", + "name" : "@RJBS/Repository", + "version" : "0.14" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "@RJBS/TestMoreWithSubtests", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@RJBS/PodWeaver", + "version" : "3.101641" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Check", + "name" : "@RJBS/@Git/Check", + "version" : "1.102810" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Commit", + "name" : "@RJBS/@Git/Commit", + "version" : "1.102810" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Tag", + "name" : "@RJBS/@Git/Tag", + "version" : "1.102810" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Push", + "name" : "@RJBS/@Git/Push", + "version" : "1.102810" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "4.102342" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "4.102342" + } + ], + "zilla" : { + "class" : "Dist::Zilla::Dist::Builder", + "config" : { + "is_trial" : 0 + }, + "version" : "4.102342" + } + } + }, + "name" : "String::RewritePrefix", + "pathname" : "R/RJ/RJBS/String-RewritePrefix-0.006.tar.gz", + "provides" : { + "String::RewritePrefix" : { + "file" : "String/RewritePrefix.pm", + "version" : "0.006" + } + }, + "version" : "0.006" + }, + "Sub::Exporter" : { + "dist" : "Sub-Exporter-0.982", + "module" : "Sub::Exporter", + "mymeta" : { + "abstract" : "a sophisticated exporter for custom-built routines", + "author" : [ + "Ricardo SIGNES, C<< <rjbs@cpan.org> >>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.77, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Sub-Exporter", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Data::OptList" : "0.1", + "ExtUtils::MakeMaker" : "6.62", + "Params::Util" : "0.14", + "Sub::Install" : "0.92" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://github.com/rjbs/sub-exporter" + } + }, + "version" : "0.982", + "x_module_name" : "Sub::Exporter" + }, + "name" : "Sub::Exporter", + "pathname" : "R/RJ/RJBS/Sub-Exporter-0.982.tar.gz", + "provides" : { + "Sub::Exporter" : { + "file" : "Sub/Exporter.pm", + "version" : "0.982" + }, + "Sub::Exporter::Util" : { + "file" : "Sub/Exporter/Util.pm", + "version" : "0.982" + } + }, + "version" : "0.982" + }, + "Sub::Install" : { + "dist" : "Sub-Install-0.925", + "module" : "Sub::Install", + "mymeta" : { + "abstract" : "install subroutines into packages easily", + "author" : [ + "Ricardo Signes <rjbs@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.48, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Sub-Install", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Scalar::Util" : 0, + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "x_Repository" : "http://github.com/rjbs/sub-install" + }, + "version" : "0.925" + }, + "name" : "Sub::Install", + "pathname" : "R/RJ/RJBS/Sub-Install-0.925.tar.gz", + "provides" : { + "Sub::Install" : { + "file" : "Sub/Install.pm", + "version" : "0.925" + } + }, + "version" : "0.925" + }, + "Sub::Name" : { + "dist" : "Sub-Name-0.05", + "module" : "Sub::Name", + "mymeta" : { + "abstract" : "(re)name a sub", + "author" : [ + "Matthijs van Duin <xmath@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Sub-Name", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "0.05" + }, + "name" : "Sub::Name", + "pathname" : "F/FL/FLORA/Sub-Name-0.05.tar.gz", + "provides" : { + "Sub::Name" : { + "file" : "Sub/Name.pm", + "version" : "0.05" + } + }, + "version" : "0.05" + }, + "Sub::Override" : { + "dist" : "Sub-Override-0.08", + "module" : "Sub::Override", + "mymeta" : { + "abstract" : "Perl extension for easily overriding subroutines", + "author" : [ + "Curtis Poe <eop_divo_sitruc@yahoo.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Sub-Override", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Sub::Uplevel" : 0, + "Test::Exception" : "0.21", + "Test::More" : "0.47" + } + } + }, + "release_status" : "stable", + "version" : "0.08" + }, + "name" : "Sub::Override", + "pathname" : "O/OV/OVID/Sub-Override-0.08.tar.gz", + "provides" : { + "Sub::Override" : { + "file" : "Sub/Override.pm", + "version" : "0.08" + } + }, + "version" : "0.08" + }, + "Sub::Uplevel" : { + "dist" : "Sub-Uplevel-0.22", + "module" : "Sub::Uplevel", + "mymeta" : { + "abstract" : "apparently run a function in a higher stack frame", + "author" : [ + "David A. Golden <dagolden@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Sub-Uplevel", + "no_index" : { + "directory" : [ + "examples", + "inc" + ], + "package" : [ + "DB" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Carp" : 0, + "Test::More" : "0.47" + } + }, + "configure" : { + "requires" : { + "Module::Build" : "0.35" + } + }, + "runtime" : { + "requires" : { + "perl" : "5.006" + } + } + }, + "provides" : { + "DB" : { + "file" : "lib/Sub/Uplevel.pm", + "version" : 0 + }, + "Sub::Uplevel" : { + "file" : "lib/Sub/Uplevel.pm", + "version" : "0.22" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://github.com/dagolden/sub-uplevel" + } + }, + "version" : "0.22" + }, + "name" : "Sub::Uplevel", + "pathname" : "D/DA/DAGOLDEN/Sub-Uplevel-0.22.tar.gz", + "provides" : { + "Sub::Uplevel" : { + "file" : "Sub/Uplevel.pm", + "version" : "0.22" + } + }, + "version" : "0.22" + }, + "Task::Weaken" : { + "dist" : "Task-Weaken-1.04", + "module" : "Task::Weaken", + "mymeta" : { + "abstract" : "Ensure that a platform has weaken support", + "author" : [ + "Adam Kennedy <adamk@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Task-Weaken", + "no_index" : { + "directory" : [ + "inc", + "t", + "xt" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "File::Spec" : "0.80", + "Test::More" : "0.42" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Scalar::Util" : "1.14", + "perl" : "5.005" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://svn.ali.as/cpan/trunk/Task-Weaken" + }, + "x_ChangeLog" : "http://fisheye2.atlassian.com/changelog/cpan/trunk/Task-Weaken" + }, + "version" : "1.04", + "x_module_name" : "Task::Weaken" + }, + "name" : "Task::Weaken", + "pathname" : "/authors/id/A/AD/ADAMK/Task-Weaken-1.04.tar.gz", + "provides" : { + "Task::Weaken" : { + "file" : "Task/Weaken.pm", + "version" : "1.04" + } + }, + "version" : "1.04" + }, + "Template" : { + "dist" : "Template-Toolkit-2.22", + "module" : "Template", + "mymeta" : { + "abstract" : "comprehensive template processing system", + "author" : [ + "Andy Wardley <abw@wardley.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.48, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Template-Toolkit", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "AppConfig" : "1.56", + "File::Spec" : "0.8", + "File::Temp" : "0.12", + "Scalar::Util" : 0 + } + } + }, + "release_status" : "stable", + "version" : "2.22" + }, + "name" : "Template", + "pathname" : "/authors/id/A/AB/ABW/Template-Toolkit-2.22.tar.gz", + "provides" : { + "Template" : { + "file" : "Template.pm", + "version" : "2.22" + }, + "Template::Base" : { + "file" : "Template/Base.pm", + "version" : "2.78" + }, + "Template::Config" : { + "file" : "Template/Config.pm", + "version" : "2.75" + }, + "Template::Constants" : { + "file" : "Template/Constants.pm", + "version" : "2.75" + }, + "Template::Context" : { + "file" : "Template/Context.pm", + "version" : "2.98" + }, + "Template::Directive" : { + "file" : "Template/Directive.pm", + "version" : "2.2" + }, + "Template::Document" : { + "file" : "Template/Document.pm", + "version" : "2.79" + }, + "Template::Exception" : { + "file" : "Template/Exception.pm", + "version" : "2.7" + }, + "Template::Filters" : { + "file" : "Template/Filters.pm", + "version" : "2.87" + }, + "Template::Grammar" : { + "file" : "Template/Grammar.pm", + "version" : "2.25" + }, + "Template::Iterator" : { + "file" : "Template/Iterator.pm", + "version" : "2.68" + }, + "Template::Monad::Assert" : { + "file" : "Template/Plugin/Assert.pm" + }, + "Template::Monad::Scalar" : { + "file" : "Template/Plugin/Scalar.pm" + }, + "Template::Namespace::Constants" : { + "file" : "Template/Namespace/Constants.pm", + "version" : "1.27" + }, + "Template::Parser" : { + "file" : "Template/Parser.pm", + "version" : "2.89" + }, + "Template::Perl" : { + "file" : "Template/Filters.pm" + }, + "Template::Plugin" : { + "file" : "Template/Plugin.pm", + "version" : "2.7" + }, + "Template::Plugin::Assert" : { + "file" : "Template/Plugin/Assert.pm", + "version" : "1" + }, + "Template::Plugin::CGI" : { + "file" : "Template/Plugin/CGI.pm", + "version" : "2.7" + }, + "Template::Plugin::Datafile" : { + "file" : "Template/Plugin/Datafile.pm", + "version" : "2.72" + }, + "Template::Plugin::Date" : { + "file" : "Template/Plugin/Date.pm", + "version" : "2.78" + }, + "Template::Plugin::Date::Calc" : { + "file" : "Template/Plugin/Date.pm" + }, + "Template::Plugin::Date::Manip" : { + "file" : "Template/Plugin/Date.pm" + }, + "Template::Plugin::Directory" : { + "file" : "Template/Plugin/Directory.pm", + "version" : "2.7" + }, + "Template::Plugin::Dumper" : { + "file" : "Template/Plugin/Dumper.pm", + "version" : "2.7" + }, + "Template::Plugin::File" : { + "file" : "Template/Plugin/File.pm", + "version" : "2.71" + }, + "Template::Plugin::Filter" : { + "file" : "Template/Plugin/Filter.pm", + "version" : "1.38" + }, + "Template::Plugin::Format" : { + "file" : "Template/Plugin/Format.pm", + "version" : "2.7" + }, + "Template::Plugin::HTML" : { + "file" : "Template/Plugin/HTML.pm", + "version" : "2.62" + }, + "Template::Plugin::Image" : { + "file" : "Template/Plugin/Image.pm", + "version" : "1.21" + }, + "Template::Plugin::Iterator" : { + "file" : "Template/Plugin/Iterator.pm", + "version" : "2.68" + }, + "Template::Plugin::Math" : { + "file" : "Template/Plugin/Math.pm", + "version" : "1.16" + }, + "Template::Plugin::Pod" : { + "file" : "Template/Plugin/Pod.pm", + "version" : "2.69" + }, + "Template::Plugin::Procedural" : { + "file" : "Template/Plugin/Procedural.pm", + "version" : "1.17" + }, + "Template::Plugin::Scalar" : { + "file" : "Template/Plugin/Scalar.pm", + "version" : "1" + }, + "Template::Plugin::String" : { + "file" : "Template/Plugin/String.pm", + "version" : "2.4" + }, + "Template::Plugin::Table" : { + "file" : "Template/Plugin/Table.pm", + "version" : "2.71" + }, + "Template::Plugin::URL" : { + "file" : "Template/Plugin/URL.pm", + "version" : "2.74" + }, + "Template::Plugin::View" : { + "file" : "Template/Plugin/View.pm", + "version" : "2.68" + }, + "Template::Plugin::Wrap" : { + "file" : "Template/Plugin/Wrap.pm", + "version" : "2.68" + }, + "Template::Plugins" : { + "file" : "Template/Plugins.pm", + "version" : "2.77" + }, + "Template::Provider" : { + "file" : "Template/Provider.pm", + "version" : "2.94" + }, + "Template::Service" : { + "file" : "Template/Service.pm", + "version" : "2.8" + }, + "Template::Stash" : { + "file" : "Template/Stash.pm", + "version" : "2.91" + }, + "Template::Stash::Context" : { + "file" : "Template/Stash/Context.pm", + "version" : "1.63" + }, + "Template::Stash::XS" : { + "file" : "Template/Stash/XS.pm" + }, + "Template::Test" : { + "file" : "Template/Test.pm", + "version" : "2.75" + }, + "Template::TieString" : { + "file" : "Template/Config.pm" + }, + "Template::VMethods" : { + "file" : "Template/VMethods.pm", + "version" : "2.16" + }, + "Template::View" : { + "file" : "Template/View.pm", + "version" : "2.91" + }, + "bytes" : { + "file" : "Template/Provider.pm" + } + }, + "version" : "2.22" + }, + "Template::Plugin::Comma" : { + "dist" : "Template-Plugin-Comma-0.04", + "module" : "Template::Plugin::Comma", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Template-Plugin-Comma", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Template" : "2.07", + "Test::More" : "0.32" + } + } + }, + "release_status" : "stable", + "version" : "0.04" + }, + "name" : "Template::Plugin::Comma", + "pathname" : "M/MI/MIYAGAWA/Template-Plugin-Comma-0.04.tar.gz", + "provides" : { + "Template::Plugin::Comma" : { + "file" : "Template/Plugin/Comma.pm", + "version" : "0.04" + } + }, + "version" : "0.04" + }, + "Template::Timer" : { + "dist" : "Template-Timer-1.00", + "module" : "Template::Timer", + "mymeta" : { + "abstract" : "Rudimentary profiling for Template Toolkit", + "author" : [ + "Andy Lester <andy@petdance.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.44, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Template-Timer", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Template" : 0, + "Test::More" : 0, + "Time::HiRes" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "x_Repository" : "http://github.com/petdance/template-timer/" + }, + "version" : "1.00" + }, + "name" : "Template::Timer", + "pathname" : "P/PE/PETDANCE/Template-Timer-1.00.tar.gz", + "provides" : { + "Template::Timer" : { + "file" : "Template/Timer.pm", + "version" : "1.00" + } + }, + "version" : "1.00" + }, + "Test::Base" : { + "dist" : "Test-Base-0.60", + "module" : "Test::Base", + "mymeta" : { + "abstract" : "A Data Driven Testing Framework", + "author" : [ + "Ingy döt Net <ingy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-Base", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "recommends" : { + "Test::Deep" : 0 + }, + "requires" : { + "Filter::Util::Call" : 0, + "Spiffy" : "0.30", + "Test::More" : "0.62", + "perl" : "5.006001" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.60" + }, + "name" : "Test::Base", + "pathname" : "I/IN/INGY/Test-Base-0.60.tar.gz", + "provides" : { + "Module::Install::TestBase" : { + "file" : "Module/Install/TestBase.pm", + "version" : "0.60" + }, + "Test::Base" : { + "file" : "Test/Base.pm", + "version" : "0.60" + }, + "Test::Base::Block" : { + "file" : "Test/Base.pm" + }, + "Test::Base::Filter" : { + "file" : "Test/Base/Filter.pm" + }, + "Test::Base::Handle" : { + "file" : "Test/Base.pm" + } + }, + "version" : "0.60" + }, + "Test::Deep" : { + "dist" : "Test-Deep-0.108", + "module" : "Test::Deep", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "Fergal Daly <fergal@esatclear.ie>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-Deep", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "List::Util" : "1.09", + "Scalar::Util" : "1.09", + "Test::More" : 0, + "Test::NoWarnings" : "0.02", + "Test::Tester" : "0.04" + } + } + }, + "release_status" : "stable", + "version" : "0.108" + }, + "name" : "Test::Deep", + "pathname" : "R/RJ/RJBS/Test-Deep-0.108.tar.gz", + "provides" : { + "Test::Deep" : { + "file" : "Test/Deep.pm", + "version" : "0.108" + }, + "Test::Deep::All" : { + "file" : "Test/Deep/All.pm" + }, + "Test::Deep::Any" : { + "file" : "Test/Deep/Any.pm" + }, + "Test::Deep::Array" : { + "file" : "Test/Deep/Array.pm" + }, + "Test::Deep::ArrayEach" : { + "file" : "Test/Deep/ArrayEach.pm" + }, + "Test::Deep::ArrayElementsOnly" : { + "file" : "Test/Deep/ArrayElementsOnly.pm" + }, + "Test::Deep::ArrayLength" : { + "file" : "Test/Deep/ArrayLength.pm" + }, + "Test::Deep::ArrayLengthOnly" : { + "file" : "Test/Deep/ArrayLengthOnly.pm" + }, + "Test::Deep::Blessed" : { + "file" : "Test/Deep/Blessed.pm" + }, + "Test::Deep::Boolean" : { + "file" : "Test/Deep/Boolean.pm" + }, + "Test::Deep::Cache" : { + "file" : "Test/Deep/Cache.pm" + }, + "Test::Deep::Cache::Simple" : { + "file" : "Test/Deep/Cache/Simple.pm" + }, + "Test::Deep::Class" : { + "file" : "Test/Deep/Class.pm" + }, + "Test::Deep::Cmp" : { + "file" : "Test/Deep/Cmp.pm" + }, + "Test::Deep::Code" : { + "file" : "Test/Deep/Code.pm" + }, + "Test::Deep::Hash" : { + "file" : "Test/Deep/Hash.pm" + }, + "Test::Deep::HashEach" : { + "file" : "Test/Deep/HashEach.pm" + }, + "Test::Deep::HashElements" : { + "file" : "Test/Deep/HashElements.pm" + }, + "Test::Deep::HashKeys" : { + "file" : "Test/Deep/HashKeys.pm" + }, + "Test::Deep::HashKeysOnly" : { + "file" : "Test/Deep/HashKeysOnly.pm" + }, + "Test::Deep::Ignore" : { + "file" : "Test/Deep/Ignore.pm" + }, + "Test::Deep::Isa" : { + "file" : "Test/Deep/Isa.pm" + }, + "Test::Deep::ListMethods" : { + "file" : "Test/Deep/ListMethods.pm" + }, + "Test::Deep::MM" : { + "file" : "Test/Deep/MM.pm" + }, + "Test::Deep::Methods" : { + "file" : "Test/Deep/Methods.pm" + }, + "Test::Deep::NoTest" : { + "file" : "Test/Deep/NoTest.pm" + }, + "Test::Deep::Number" : { + "file" : "Test/Deep/Number.pm" + }, + "Test::Deep::Ref" : { + "file" : "Test/Deep/Ref.pm" + }, + "Test::Deep::RefType" : { + "file" : "Test/Deep/RefType.pm" + }, + "Test::Deep::Regexp" : { + "file" : "Test/Deep/Regexp.pm" + }, + "Test::Deep::RegexpMatches" : { + "file" : "Test/Deep/RegexpMatches.pm" + }, + "Test::Deep::RegexpRef" : { + "file" : "Test/Deep/RegexpRef.pm" + }, + "Test::Deep::RegexpRefOnly" : { + "file" : "Test/Deep/RegexpRefOnly.pm" + }, + "Test::Deep::RegexpVersion" : { + "file" : "Test/Deep/RegexpVersion.pm" + }, + "Test::Deep::ScalarRef" : { + "file" : "Test/Deep/ScalarRef.pm" + }, + "Test::Deep::ScalarRefOnly" : { + "file" : "Test/Deep/ScalarRefOnly.pm" + }, + "Test::Deep::Set" : { + "file" : "Test/Deep/Set.pm" + }, + "Test::Deep::Shallow" : { + "file" : "Test/Deep/Shallow.pm" + }, + "Test::Deep::Stack" : { + "file" : "Test/Deep/Stack.pm" + }, + "Test::Deep::String" : { + "file" : "Test/Deep/String.pm" + }, + "Test::Deep::SubHash" : { + "file" : "Test/Deep/Hash.pm" + }, + "Test::Deep::SubHashElements" : { + "file" : "Test/Deep/HashElements.pm" + }, + "Test::Deep::SubHashKeys" : { + "file" : "Test/Deep/HashKeys.pm" + }, + "Test::Deep::SubHashKeysOnly" : { + "file" : "Test/Deep/HashKeysOnly.pm" + }, + "Test::Deep::SuperHash" : { + "file" : "Test/Deep/Hash.pm" + }, + "Test::Deep::SuperHashElements" : { + "file" : "Test/Deep/HashElements.pm" + }, + "Test::Deep::SuperHashKeys" : { + "file" : "Test/Deep/HashKeys.pm" + }, + "Test::Deep::SuperHashKeysOnly" : { + "file" : "Test/Deep/HashKeysOnly.pm" + } + }, + "version" : "0.108" + }, + "Test::Exception" : { + "dist" : "Test-Exception-0.31", + "module" : "Test::Exception", + "mymeta" : { + "abstract" : "Test exception based code", + "author" : [ + "Adrian Howard <adrianh@quietstars.com>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-Exception", + "prereqs" : { + "configure" : { + "requires" : { + "Module::Build" : "0.36" + } + }, + "runtime" : { + "requires" : { + "Sub::Uplevel" : "0.18", + "Test::Builder" : "0.7", + "Test::Builder::Tester" : "1.07", + "Test::Harness" : "2.03", + "Test::More" : "0.7", + "Test::Simple" : "0.7" + } + } + }, + "provides" : { + "Test::Exception" : { + "file" : "lib/Test/Exception.pm", + "version" : "0.31" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.31" + }, + "name" : "Test::Exception", + "pathname" : "/authors/id/A/AD/ADIE/Test-Exception-0.31.tar.gz", + "provides" : { + "Test::Exception" : { + "file" : "Test/Exception.pm", + "version" : "0.31" + } + }, + "version" : "0.31" + }, + "Test::Fatal" : { + "dist" : "Test-Fatal-0.008", + "module" : "Test::Fatal", + "mymeta" : { + "abstract" : "incredibly simple helpers for testing code with exceptions", + "author" : [ + "Ricardo Signes <rjbs@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.300003, CPAN::Meta::Converter version 2.112621, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-Fatal", + "prereqs" : { + "build" : { + "requires" : { + "Test::Builder::Tester" : 0, + "Test::More" : "0.47", + "overload" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.30" + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Exporter" : "5.57", + "Test::Builder" : 0, + "Try::Tiny" : "0.07", + "strict" : 0, + "warnings" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "homepage" : "https://github.com/rjbs/test-fatal", + "repository" : { + "url" : "https://github.com/rjbs/test-fatal.git" + } + }, + "version" : "0.008", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::CheckPrereqsIndexed", + "name" : "@RJBS/CheckPrereqsIndexed", + "version" : "0.005" + }, + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@RJBS/@Basic/GatherDir", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@RJBS/@Basic/PruneCruft", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@RJBS/@Basic/ManifestSkip", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@RJBS/@Basic/MetaYAML", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@RJBS/@Basic/License", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@RJBS/@Basic/Readme", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@RJBS/@Basic/ExtraTests", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@RJBS/@Basic/ExecDir", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@RJBS/@Basic/ShareDir", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::MakeMaker", + "name" : "@RJBS/@Basic/MakeMaker", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@RJBS/@Basic/Manifest", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::TestRelease", + "name" : "@RJBS/@Basic/TestRelease", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@RJBS/@Basic/ConfirmRelease", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@RJBS/@Basic/UploadToCPAN", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::AutoPrereqs", + "name" : "@RJBS/AutoPrereqs", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::Git::NextVersion", + "name" : "@RJBS/Git::NextVersion", + "version" : "1.112510" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@RJBS/PkgVersion", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@RJBS/MetaConfig", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@RJBS/MetaJSON", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::NextRelease", + "name" : "@RJBS/NextRelease", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@RJBS/PodSyntaxTests", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::Repository", + "name" : "@RJBS/Repository", + "version" : "0.18" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "@RJBS/TestMoreWithSubtests", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@RJBS/PodWeaver", + "version" : "3.101641" + }, + { + "class" : "Dist::Zilla::Plugin::GithubMeta", + "name" : "@RJBS/GithubMeta", + "version" : "0.26" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Check", + "name" : "@RJBS/@Git/Check", + "version" : "1.112510" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Commit", + "name" : "@RJBS/@Git/Commit", + "version" : "1.112510" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Tag", + "name" : "@RJBS/@Git/Tag", + "version" : "1.112510" + }, + { + "class" : "Dist::Zilla::Plugin::Git::Push", + "name" : "@RJBS/@Git/Push", + "version" : "1.112510" + }, + { + "class" : "Dist::Zilla::Plugin::RemovePrereqs", + "config" : { + "Dist::Zilla::Plugin::RemovePrereqs" : { + "modules_to_remove" : [ + "Test::More" + ] + } + }, + "name" : "RemovePrereqs", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::Prereqs", + "config" : { + "Dist::Zilla::Plugin::Prereqs" : { + "phase" : "test", + "type" : "requires" + } + }, + "name" : "TestRequires", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":IncModules", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "4.300003" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":MainModule", + "version" : "4.300003" + } + ], + "zilla" : { + "class" : "Dist::Zilla::Dist::Builder", + "config" : { + "is_trial" : "0" + }, + "version" : "4.300003" + } + } + }, + "name" : "Test::Fatal", + "pathname" : "R/RJ/RJBS/Test-Fatal-0.008.tar.gz", + "provides" : { + "Test::Fatal" : { + "file" : "Test/Fatal.pm", + "version" : "0.008" + } + }, + "version" : "0.008" + }, + "Test::LongString" : { + "dist" : "Test-LongString-0.15", + "module" : "Test::LongString", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "Rafael Garcia-Suarez <rgs@consttype.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.55_02, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-LongString", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::Builder" : "0.12", + "Test::Builder::Tester" : "1.04" + } + } + }, + "release_status" : "stable", + "version" : "0.15" + }, + "name" : "Test::LongString", + "pathname" : "R/RG/RGARCIA/Test-LongString-0.15.tar.gz", + "provides" : { + "Test::LongString" : { + "file" : "Test/LongString.pm", + "version" : "0.15" + } + }, + "version" : "0.15" + }, + "Test::Manifest" : { + "dist" : "Test-Manifest-1.23", + "module" : "Test::Manifest", + "mymeta" : { + "abstract" : "interact with a t/test_manifest file", + "author" : [ + "brian d foy <bdfoy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.50, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-Manifest", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.03", + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "version" : "1.23" + }, + "name" : "Test::Manifest", + "pathname" : "B/BD/BDFOY/Test-Manifest-1.23.tar.gz", + "provides" : { + "Test::Manifest" : { + "file" : "Test/Manifest.pm", + "version" : "1.23" + } + }, + "version" : "1.23" + }, + "Test::NoWarnings" : { + "dist" : "Test-NoWarnings-1.04", + "module" : "Test::NoWarnings", + "mymeta" : { + "abstract" : "Make sure you didn't emit any warnings while testing", + "author" : [ + "Fergal Daly <fergal@esatclear.ie>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112621, CPAN::Meta::Converter version 2.112150", + "license" : [ + "open_source" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-NoWarnings", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : "0.47", + "Test::Tester" : "0.107" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::Builder" : "0.86", + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://svn.ali.as/cpan/trunk/Test-NoWarnings" + } + }, + "version" : "1.04" + }, + "name" : "Test::NoWarnings", + "pathname" : "A/AD/ADAMK/Test-NoWarnings-1.04.tar.gz", + "provides" : { + "Test::NoWarnings" : { + "file" : "Test/NoWarnings.pm", + "version" : "1.04" + }, + "Test::NoWarnings::Warning" : { + "file" : "Test/NoWarnings/Warning.pm", + "version" : "1.04" + } + }, + "version" : "1.04" + }, + "Test::Object" : { + "dist" : "Test-Object-0.07", + "module" : "Test::Object", + "mymeta" : { + "abstract" : "Thoroughly testing objects via registered handlers", + "author" : [ + "Adam Kennedy <cpan@ali.as>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.64, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-Object", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Exporter" : 0, + "File::Spec" : "0.80", + "Scalar::Util" : "1.16", + "Test::Builder" : "0.33", + "Test::Builder::Tester" : "1.02", + "Test::More" : "0.42", + "overload" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.07" + }, + "name" : "Test::Object", + "pathname" : "/authors/id/A/AD/ADAMK/Test-Object-0.07.tar.gz", + "provides" : { + "Test::Object" : { + "file" : "Test/Object.pm", + "version" : "0.07" + }, + "Test::Object::Test" : { + "file" : "Test/Object/Test.pm", + "version" : "0.07" + } + }, + "version" : "0.07" + }, + "Test::Output" : { + "dist" : "Test-Output-0.16", + "module" : "Test::Output", + "mymeta" : { + "abstract" : "Utilities to test STDOUT and STDERR messages.", + "author" : [ + "brian d foy <bdfoy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.48, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-Output", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "File::Temp" : "0.21", + "Sub::Exporter" : 0, + "Test::More" : 0, + "Test::Tester" : "0.107" + } + } + }, + "release_status" : "stable", + "version" : "0.16" + }, + "name" : "Test::Output", + "pathname" : "/authors/id/B/BD/BDFOY/Test-Output-0.16.tar.gz", + "provides" : { + "Test::Output" : { + "file" : "Test/Output.pm", + "version" : "0.16" + }, + "Test::Output::Tie" : { + "file" : "Test/Output/Tie.pm", + "version" : "0.14" + } + }, + "version" : "0.16" + }, + "Test::Pod" : { + "dist" : "Test-Pod-1.45", + "module" : "Test::Pod", + "mymeta" : { + "abstract" : "check for POD errors in files", + "author" : [ + "Currently maintained by David E. Wheeler, C<< <david@justatheory.com> >>." + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-Pod", + "prereqs" : { + "build" : { + "requires" : { + "File::Spec" : 0, + "Pod::Simple" : "3.05", + "Test::More" : "0.62" + } + }, + "configure" : { + "requires" : { + "Module::Build" : "0.30" + } + }, + "runtime" : { + "requires" : { + "File::Spec" : 0, + "Pod::Simple" : "3.05", + "Test::Builder::Tester" : "1.02", + "Test::More" : "0.62" + } + } + }, + "provides" : { + "Test::Pod" : { + "file" : "lib/Test/Pod.pm", + "version" : "1.45" + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://github.com/theory/test-pod/issues/" + }, + "homepage" : "http://search.cpan.org/dist/Test-Pod/", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://github.com/theory/test-pod/tree/" + } + }, + "version" : "1.45" + }, + "name" : "Test::Pod", + "pathname" : "D/DW/DWHEELER/Test-Pod-1.45.tar.gz", + "provides" : { + "Test::Pod" : { + "file" : "Test/Pod.pm", + "version" : "1.45" + } + }, + "version" : "1.45" + }, + "Test::Requires" : { + "dist" : "Test-Requires-0.06", + "module" : "Test::Requires", + "mymeta" : { + "abstract" : "Checks to see if the module can be loaded", + "author" : [ + "Tokuhiro Matsuno <tokuhirom @*(#RJKLFHFSDLJF gmail.com>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-Requires", + "no_index" : { + "directory" : [ + "inc", + "t", + "xt" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Test::More" : "0.61", + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.06" + }, + "name" : "Test::Requires", + "pathname" : "T/TO/TOKUHIROM/Test-Requires-0.06.tar.gz", + "provides" : { + "Test::Requires" : { + "file" : "Test/Requires.pm", + "version" : "0.06" + } + }, + "version" : "0.06" + }, + "Test::Simple" : { + "dist" : "Test-Simple-0.98", + "module" : "Test::More", + "mymeta" : { + "abstract" : "Basic utilities for writing tests.", + "author" : [ + "Michael G Schwern <schwern@pobox.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.57_06, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-Simple", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::Harness" : "2.03", + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://github.com/schwern/test-more/issues" + }, + "homepage" : "http://test-more.googlecode.com", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://github.com/schwern/test-more/tree/master" + }, + "x_MailingList" : "http://groups.google.com/group/test-more-users" + }, + "version" : "0.98" + }, + "name" : "Test::Simple", + "pathname" : "M/MS/MSCHWERN/Test-Simple-0.98.tar.gz", + "provides" : { + "Test::Builder" : { + "file" : "Test/Builder.pm", + "version" : "0.98" + }, + "Test::Builder::IO::Scalar" : { + "file" : "Test/Builder/IO/Scalar.pm", + "version" : "2.110" + }, + "Test::Builder::Module" : { + "file" : "Test/Builder/Module.pm", + "version" : "0.98" + }, + "Test::Builder::Tester" : { + "file" : "Test/Builder/Tester.pm", + "version" : "1.22" + }, + "Test::Builder::Tester::Color" : { + "file" : "Test/Builder/Tester/Color.pm", + "version" : "1.22" + }, + "Test::Builder::Tester::Tie" : { + "file" : "Test/Builder/Tester.pm" + }, + "Test::More" : { + "file" : "Test/More.pm", + "version" : "0.98" + }, + "Test::Simple" : { + "file" : "Test/Simple.pm", + "version" : "0.98" + } + }, + "version" : "0.98" + }, + "Test::SubCalls" : { + "dist" : "Test-SubCalls-1.09", + "module" : "Test::SubCalls", + "mymeta" : { + "abstract" : "Track the number of times subs are called", + "author" : [ + "Adam Kennedy <adamk@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.85, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-SubCalls", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "File::Spec" : "0.80", + "Hook::LexWrap" : "0.20", + "Test::Builder::Tester" : "1.02", + "Test::More" : "0.42" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://svn.ali.as/cpan/trunk/Test-SubCalls" + }, + "x_ChangeLog" : "http://fisheye2.atlassian.com/changelog/cpan/trunk/Test-SubCalls" + }, + "version" : "1.09", + "x_module_name" : "Test::SubCalls" + }, + "name" : "Test::SubCalls", + "pathname" : "/authors/id/A/AD/ADAMK/Test-SubCalls-1.09.tar.gz", + "provides" : { + "Test::SubCalls" : { + "file" : "Test/SubCalls.pm", + "version" : "1.09" + } + }, + "version" : "1.09" + }, + "Test::Tester" : { + "dist" : "Test-Tester-0.108", + "module" : "Test::Tester", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.30_01, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-Tester", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::Builder" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.108", + "x_installdirs" : "perl", + "x_version_from" : "./lib/Test/Tester.pm" + }, + "name" : "Test::Tester", + "pathname" : "F/FD/FDALY/Test-Tester-0.108.tar.gz", + "provides" : { + "Test::Tester" : { + "file" : "Test/Tester.pm", + "version" : "0.108" + }, + "Test::Tester::Capture" : { + "file" : "Test/Tester/Capture.pm" + }, + "Test::Tester::CaptureRunner" : { + "file" : "Test/Tester/CaptureRunner.pm" + }, + "Test::Tester::Delegate" : { + "file" : "Test/Tester/Delegate.pm" + } + }, + "version" : "0.108" + }, + "Test::WWW::Mechanize" : { + "dist" : "Test-WWW-Mechanize-1.38", + "module" : "Test::WWW::Mechanize", + "mymeta" : { + "abstract" : "Testing-specific WWW::Mechanize subclass", + "author" : [ + "Andy Lester <andy@petdance.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112621, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-WWW-Mechanize", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp::Assert::More" : 0, + "HTML::TreeBuilder" : 0, + "HTTP::Server::Simple" : "0.42", + "HTTP::Server::Simple::CGI" : 0, + "LWP" : "6.02", + "Test::Builder::Tester" : "1.09", + "Test::LongString" : "0.15", + "Test::More" : 0, + "URI::file" : 0, + "WWW::Mechanize" : "1.68", + "perl" : "5.008" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://code.google.com/p/www-mechanize/issues/list" + }, + "homepage" : "https://github.com/petdance/test-www-mechanize", + "license" : [ + "http://www.opensource.org/licenses/artistic-license-2.0" + ], + "repository" : { + "url" : "https://github.com/petdance/test-www-mechanize" + } + }, + "version" : "1.38" + }, + "name" : "Test::WWW::Mechanize", + "pathname" : "P/PE/PETDANCE/Test-WWW-Mechanize-1.38.tar.gz", + "provides" : { + "Test::WWW::Mechanize" : { + "file" : "Test/WWW/Mechanize.pm", + "version" : "1.38" + } + }, + "version" : "1.38" + }, + "Test::WWW::Mechanize::Catalyst" : { + "dist" : "Test-WWW-Mechanize-Catalyst-0.53", + "module" : "Test::WWW::Mechanize::Catalyst", + "mymeta" : { + "abstract" : "Test::WWW::Mechanize for Catalyst", + "author" : [ + "Ash Berlin C<< <ash@cpan.org> >> (current maintiner)" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.99, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-WWW-Mechanize-Catalyst", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Catalyst::Plugin::Session::State::Cookie" : 0, + "Catalyst::Plugin::Session::Store::Dummy" : 0, + "ExtUtils::MakeMaker" : "6.42", + "Test::Exception" : 0, + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Catalyst" : "5.00", + "LWP" : "5.816", + "Moose" : "0.67", + "Test::WWW::Mechanize" : "1.14", + "WWW::Mechanize" : "1.54", + "namespace::clean" : "0.09" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://dev.catalyst.perl.org/repos/Catalyst/Test-WWW-Mechanize-Catalyst/trunk/" + } + }, + "version" : "0.53" + }, + "name" : "Test::WWW::Mechanize::Catalyst", + "pathname" : "/authors/id/B/BO/BOBTFISH/Test-WWW-Mechanize-Catalyst-0.53.tar.gz", + "provides" : { + "Test::WWW::Mechanize::Catalyst" : { + "file" : "Test/WWW/Mechanize/Catalyst.pm", + "version" : "0.53" + } + }, + "version" : "0.53" + }, + "Test::Warn" : { + "dist" : "Test-Warn-0.23", + "module" : "Test::Warn", + "mymeta" : { + "abstract" : "Perl extension to test methods for warnings", + "author" : [ + "Alexandr Ciornii <alexchorny@gmail.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "keywords" : [ + "testing", + "warnings" + ], + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-Warn", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "File::Spec" : 0, + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Sub::Uplevel" : "0.12", + "Test::Builder" : "0.13", + "Test::Builder::Tester" : "1.02", + "Tree::DAG_Node" : "1.02", + "perl" : "5.006" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/chorny/test-warn/tree" + } + }, + "version" : "0.23" + }, + "name" : "Test::Warn", + "pathname" : "/authors/id/C/CH/CHORNY/Test-Warn-0.23.tar.gz", + "provides" : { + "Test::Warn" : { + "file" : "Test/Warn.pm", + "version" : "0.23" + }, + "Test::Warn::Categorization" : { + "file" : "Test/Warn.pm" + }, + "Test::Warn::DAG_Node_Tree" : { + "file" : "Test/Warn.pm" + } + }, + "version" : "0.23" + }, + "Test::use::ok" : { + "dist" : "Test-use-ok-0.02", + "module" : "ok", + "mymeta" : { + "abstract" : "Alternative to Test::More::use_ok", + "author" : [ + ", 2006 by Audrey Tang <cpan@audreyt.org>." + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 0.64, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Test-use-ok", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.02" + }, + "name" : "Test::use::ok", + "pathname" : "/authors/id/A/AU/AUDREYT/Test-use-ok-0.02.tar.gz", + "provides" : { + "Test::use::ok" : { + "file" : "Test/use/ok.pm", + "version" : "0.02" + }, + "ok" : { + "file" : "ok.pm", + "version" : "0.02" + } + }, + "version" : "0.02" + }, + "Text::Glob" : { + "dist" : "Text-Glob-0.09", + "module" : "Text::Glob", + "mymeta" : { + "abstract" : "match globbing patterns against text", + "author" : [ + "Richard Clamp <richardc@unixbeard.net>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Text-Glob", + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "Module::Build" : "0.36" + } + } + }, + "provides" : { + "Text::Glob" : { + "file" : "lib/Text/Glob.pm", + "version" : "0.09" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "0.09" + }, + "name" : "Text::Glob", + "pathname" : "R/RC/RCLAMP/Text-Glob-0.09.tar.gz", + "provides" : { + "Text::Glob" : { + "file" : "Text/Glob.pm", + "version" : "0.09" + } + }, + "version" : "0.09" + }, + "Text::SimpleTable" : { + "dist" : "Text-SimpleTable-2.03", + "module" : "Text::SimpleTable", + "mymeta" : { + "abstract" : "Simple eyecandy ASCII tables", + "author" : [ + "Sebastian Riedel <sri@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.54, CPAN::Meta::Converter version 2.112150", + "license" : [ + "artistic_2" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Text-SimpleTable", + "no_index" : { + "directory" : [ + "t", + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : {} + }, + "runtime" : { + "requires" : { + "ExtUtils::MakeMaker" : 0, + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://github.com/kraih/text-simpletable/tree/master" + } + }, + "version" : "2.03" + }, + "name" : "Text::SimpleTable", + "pathname" : "M/MR/MRAMBERG/Text-SimpleTable-2.03.tar.gz", + "provides" : { + "Text::SimpleTable" : { + "file" : "Text/SimpleTable.pm", + "version" : "2.03" + } + }, + "version" : "2.03" + }, + "Text::Template" : { + "dist" : "Text-Template-1.45", + "module" : "Text::Template", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.30_01, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Text-Template", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "1.45", + "x_installdirs" : "site", + "x_version_from" : "lib/Text/Template.pm" + }, + "name" : "Text::Template", + "pathname" : "M/MJ/MJD/Text-Template-1.45.tar.gz", + "provides" : { + "Text::Template" : { + "file" : "Text/Template.pm", + "version" : "1.45" + }, + "Text::Template::Preprocess" : { + "file" : "Text/Template/Preprocess.pm", + "version" : "1.45" + } + }, + "version" : "1.45" + }, + "Tie::IxHash" : { + "dist" : "Tie-IxHash-1.22", + "module" : "Tie::IxHash", + "mymeta" : { + "abstract" : "ordered associative arrays for Perl", + "author" : [ + "Gurusamy Sarathy gsar@umich.edu" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Tie-IxHash", + "prereqs" : { + "runtime" : { + "requires" : { + "perl" : "5.003" + } + } + }, + "provides" : { + "Tie::IxHash" : { + "file" : "lib/Tie/IxHash.pm", + "version" : "1.22" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://github.com/chorny/Tie-IxHash.git" + } + }, + "version" : "1.22" + }, + "name" : "Tie::IxHash", + "pathname" : "/authors/id/C/CH/CHORNY/Tie-IxHash-1.22.tar.gz", + "provides" : { + "Tie::IxHash" : { + "file" : "Tie/IxHash.pm", + "version" : "1.22" + } + }, + "version" : "1.22" + }, + "Tie::ToObject" : { + "dist" : "Tie-ToObject-0.03", + "module" : "Tie::ToObject", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.42, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Tie-ToObject", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Scalar::Util" : 0, + "Test::More" : 0, + "Test::use::ok" : 0, + "Tie::RefHash" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.03" + }, + "name" : "Tie::ToObject", + "pathname" : "N/NU/NUFFIN/Tie-ToObject-0.03.tar.gz", + "provides" : { + "Tie::ToObject" : { + "file" : "Tie/ToObject.pm", + "version" : "0.03" + } + }, + "version" : "0.03" + }, + "TimeDate" : { + "dist" : "TimeDate-1.20", + "module" : "Date::Format", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "Graham Barr <gbarr@pobox.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.48, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "TimeDate", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gbarr/perl-TimeDate" + } + }, + "version" : "1.20" + }, + "name" : "TimeDate", + "pathname" : "G/GB/GBARR/TimeDate-1.20.tar.gz", + "provides" : { + "Date::Format" : { + "file" : "Date/Format.pm", + "version" : "2.24" + }, + "Date::Format::Generic" : { + "file" : "Date/Format.pm" + }, + "Date::Language" : { + "file" : "Date/Language.pm", + "version" : "1.10" + }, + "Date::Language::Afar" : { + "file" : "Date/Language/Afar.pm", + "version" : "0.99" + }, + "Date::Language::Amharic" : { + "file" : "Date/Language/Amharic.pm", + "version" : "1.00" + }, + "Date::Language::Austrian" : { + "file" : "Date/Language/Austrian.pm", + "version" : "1.01" + }, + "Date::Language::Brazilian" : { + "file" : "Date/Language/Brazilian.pm", + "version" : "1.01" + }, + "Date::Language::Chinese" : { + "file" : "Date/Language/Chinese.pm", + "version" : "1.00" + }, + "Date::Language::Chinese_GB" : { + "file" : "Date/Language/Chinese_GB.pm", + "version" : "1.01" + }, + "Date::Language::Czech" : { + "file" : "Date/Language/Czech.pm", + "version" : "1.01" + }, + "Date::Language::Danish" : { + "file" : "Date/Language/Danish.pm", + "version" : "1.01" + }, + "Date::Language::Dutch" : { + "file" : "Date/Language/Dutch.pm", + "version" : "1.02" + }, + "Date::Language::English" : { + "file" : "Date/Language/English.pm", + "version" : "1.01" + }, + "Date::Language::Finnish" : { + "file" : "Date/Language/Finnish.pm", + "version" : "1.01" + }, + "Date::Language::French" : { + "file" : "Date/Language/French.pm", + "version" : "1.04" + }, + "Date::Language::Gedeo" : { + "file" : "Date/Language/Gedeo.pm", + "version" : "0.99" + }, + "Date::Language::German" : { + "file" : "Date/Language/German.pm", + "version" : "1.02" + }, + "Date::Language::Greek" : { + "file" : "Date/Language/Greek.pm", + "version" : "1.00" + }, + "Date::Language::Hungarian" : { + "file" : "Date/Language/Hungarian.pm", + "version" : "1.01" + }, + "Date::Language::Icelandic" : { + "file" : "Date/Language/Icelandic.pm", + "version" : "1.01" + }, + "Date::Language::Italian" : { + "file" : "Date/Language/Italian.pm", + "version" : "1.01" + }, + "Date::Language::Norwegian" : { + "file" : "Date/Language/Norwegian.pm", + "version" : "1.01" + }, + "Date::Language::Oromo" : { + "file" : "Date/Language/Oromo.pm", + "version" : "0.99" + }, + "Date::Language::Romanian" : { + "file" : "Date/Language/Romanian.pm", + "version" : "1.01" + }, + "Date::Language::Russian" : { + "file" : "Date/Language/Russian.pm", + "version" : "1.01" + }, + "Date::Language::Russian_cp1251" : { + "file" : "Date/Language/Russian_cp1251.pm", + "version" : "1.01" + }, + "Date::Language::Russian_koi8r" : { + "file" : "Date/Language/Russian_koi8r.pm", + "version" : "1.01" + }, + "Date::Language::Sidama" : { + "file" : "Date/Language/Sidama.pm", + "version" : "0.99" + }, + "Date::Language::Somali" : { + "file" : "Date/Language/Somali.pm", + "version" : "0.99" + }, + "Date::Language::Spanish" : { + "file" : "Date/Language/Spanish.pm", + "version" : "1.00" + }, + "Date::Language::Swedish" : { + "file" : "Date/Language/Swedish.pm", + "version" : "1.01" + }, + "Date::Language::Tigrinya" : { + "file" : "Date/Language/Tigrinya.pm", + "version" : "1.00" + }, + "Date::Language::TigrinyaEritrean" : { + "file" : "Date/Language/TigrinyaEritrean.pm", + "version" : "1.00" + }, + "Date::Language::TigrinyaEthiopian" : { + "file" : "Date/Language/TigrinyaEthiopian.pm", + "version" : "1.00" + }, + "Date::Language::Turkish" : { + "file" : "Date/Language/Turkish.pm", + "version" : "1.0" + }, + "Date::Parse" : { + "file" : "Date/Parse.pm", + "version" : "2.30" + }, + "Time::Zone" : { + "file" : "Time/Zone.pm", + "version" : "2.24" + } + }, + "version" : "2.24" + }, + "Tree::DAG_Node" : { + "dist" : "Tree-DAG_Node-1.06", + "module" : "Tree::DAG_Node", + "mymeta" : { + "abstract" : "(super)class for representing nodes in a tree", + "author" : [ + "David Hand, <cogent@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.36, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Tree-DAG_Node", + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "strict" : 0, + "vars" : 0 + } + } + }, + "release_status" : "stable", + "version" : "1.06" + }, + "name" : "Tree::DAG_Node", + "pathname" : "/authors/id/C/CO/COGENT/Tree-DAG_Node-1.06.tar.gz", + "provides" : { + "Tree::DAG_Node" : { + "file" : "Tree/DAG_Node.pm", + "version" : "1.06" + } + }, + "version" : "1.06" + }, + "Tree::Simple" : { + "dist" : "Tree-Simple-1.18", + "module" : "Tree::Simple", + "mymeta" : { + "abstract" : "A simple tree object", + "author" : [ + "Stevan Little, E<lt>stevan@iinteractive.comE<gt>", + "Rob Kinyon, E<lt>rob@iinteractive.comE<gt>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Tree-Simple", + "prereqs" : { + "build" : { + "requires" : { + "Test::Exception" : "0.15", + "Test::More" : "0.47" + } + }, + "runtime" : { + "requires" : { + "Scalar::Util" : "1.18", + "perl" : "v5.6.0" + } + } + }, + "provides" : { + "Tree::Simple" : { + "file" : "lib/Tree/Simple.pm", + "version" : "1.18" + }, + "Tree::Simple::Visitor" : { + "file" : "lib/Tree/Simple/Visitor.pm", + "version" : "1.11" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ] + }, + "version" : "1.18" + }, + "name" : "Tree::Simple", + "pathname" : "S/ST/STEVAN/Tree-Simple-1.18.tar.gz", + "provides" : { + "Tree::Simple" : { + "file" : "Tree/Simple.pm", + "version" : "1.18" + }, + "Tree::Simple::Visitor" : { + "file" : "Tree/Simple/Visitor.pm", + "version" : "1.11" + } + }, + "version" : "1.18" + }, + "Tree::Simple::VisitorFactory" : { + "dist" : "Tree-Simple-VisitorFactory-0.10", + "module" : "Tree::Simple::Visitor::FindByPath", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Tree-Simple-VisitorFactory", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "File::Spec" : "0.6", + "Scalar::Util" : "1.1", + "Test::Exception" : "0.15", + "Test::More" : "0.47", + "Tree::Simple" : "1.12" + } + } + }, + "release_status" : "stable", + "version" : "0.10" + }, + "name" : "Tree::Simple::VisitorFactory", + "pathname" : "S/ST/STEVAN/Tree-Simple-VisitorFactory-0.10.tar.gz", + "provides" : { + "Tree::Simple::Visitor::BreadthFirstTraversal" : { + "file" : "Tree/Simple/Visitor/BreadthFirstTraversal.pm", + "version" : "0.02" + }, + "Tree::Simple::Visitor::CreateDirectoryTree" : { + "file" : "Tree/Simple/Visitor/CreateDirectoryTree.pm", + "version" : "0.02" + }, + "Tree::Simple::Visitor::FindByNodeValue" : { + "file" : "Tree/Simple/Visitor/FindByNodeValue.pm", + "version" : "0.02" + }, + "Tree::Simple::Visitor::FindByPath" : { + "file" : "Tree/Simple/Visitor/FindByPath.pm", + "version" : "0.03" + }, + "Tree::Simple::Visitor::FindByUID" : { + "file" : "Tree/Simple/Visitor/FindByUID.pm", + "version" : "0.02" + }, + "Tree::Simple::Visitor::FromNestedArray" : { + "file" : "Tree/Simple/Visitor/FromNestedArray.pm", + "version" : "0.02" + }, + "Tree::Simple::Visitor::FromNestedHash" : { + "file" : "Tree/Simple/Visitor/FromNestedHash.pm", + "version" : "0.03" + }, + "Tree::Simple::Visitor::GetAllDescendents" : { + "file" : "Tree/Simple/Visitor/GetAllDescendents.pm", + "version" : "0.02" + }, + "Tree::Simple::Visitor::LoadClassHierarchy" : { + "file" : "Tree/Simple/Visitor/LoadClassHierarchy.pm", + "version" : "0.02" + }, + "Tree::Simple::Visitor::LoadDirectoryTree" : { + "file" : "Tree/Simple/Visitor/LoadDirectoryTree.pm", + "version" : "0.02" + }, + "Tree::Simple::Visitor::PathToRoot" : { + "file" : "Tree/Simple/Visitor/PathToRoot.pm", + "version" : "0.02" + }, + "Tree::Simple::Visitor::PostOrderTraversal" : { + "file" : "Tree/Simple/Visitor/PostOrderTraversal.pm", + "version" : "0.02" + }, + "Tree::Simple::Visitor::PreOrderTraversal" : { + "file" : "Tree/Simple/Visitor/PreOrderTraversal.pm", + "version" : "0.01" + }, + "Tree::Simple::Visitor::Sort" : { + "file" : "Tree/Simple/Visitor/Sort.pm", + "version" : "0.03" + }, + "Tree::Simple::Visitor::ToNestedArray" : { + "file" : "Tree/Simple/Visitor/ToNestedArray.pm", + "version" : "0.02" + }, + "Tree::Simple::Visitor::ToNestedHash" : { + "file" : "Tree/Simple/Visitor/ToNestedHash.pm", + "version" : "0.02" + }, + "Tree::Simple::Visitor::VariableDepthClone" : { + "file" : "Tree/Simple/Visitor/VariableDepthClone.pm", + "version" : "0.03" + }, + "Tree::Simple::VisitorFactory" : { + "file" : "Tree/Simple/VisitorFactory.pm", + "version" : "0.10" + } + }, + "version" : "0.03" + }, + "Try::Tiny" : { + "dist" : "Try-Tiny-0.11", + "module" : "Try::Tiny", + "mymeta" : { + "abstract" : "unknown", + "author" : [ + "unknown" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Try-Tiny", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.11" + }, + "name" : "Try::Tiny", + "pathname" : "D/DO/DOY/Try-Tiny-0.11.tar.gz", + "provides" : { + "Try::Tiny" : { + "file" : "Try/Tiny.pm", + "version" : "0.11" + } + }, + "version" : "0.11" + }, + "UNIVERSAL::require" : { + "dist" : "UNIVERSAL-require-0.13", + "module" : "UNIVERSAL::require", + "mymeta" : { + "abstract" : "require() modules from a variable", + "author" : [ + "Michael G Schwern <schwern@pobox.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.50, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "UNIVERSAL-require", + "no_index" : { + "directory" : [ + "t", + "inc" + ], + "package" : [ + "UNIVERSAL" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : "0.47" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=UNIVERSAL-require" + }, + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://svn.schwern.org/repos/CPAN/UNIVERSAL-require/trunk/" + } + }, + "version" : "0.13" + }, + "name" : "UNIVERSAL::require", + "pathname" : "M/MS/MSCHWERN/UNIVERSAL-require-0.13.tar.gz", + "provides" : { + "UNIVERSAL" : { + "file" : "UNIVERSAL/require.pm" + }, + "UNIVERSAL::require" : { + "file" : "UNIVERSAL/require.pm", + "version" : "0.13" + } + }, + "version" : "0.13" + }, + "URI" : { + "dist" : "URI-1.59", + "module" : "URI", + "mymeta" : { + "abstract" : "Uniform Resource Identifiers (absolute and relative)", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.57_05, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "URI", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0, + "Test" : 0, + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "recommends" : { + "Business::ISBN" : 0 + }, + "requires" : { + "MIME::Base64" : "2", + "perl" : "5.008001" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://gitorious.org/projects/perl-uri" + }, + "x_MailingList" : "mailto:libwww@perl.org" + }, + "version" : "1.59" + }, + "name" : "URI", + "pathname" : "G/GA/GAAS/URI-1.59.tar.gz", + "provides" : { + "URI" : { + "file" : "URI.pm", + "version" : "1.59" + }, + "URI::Escape" : { + "file" : "URI/Escape.pm", + "version" : "3.31" + }, + "URI::Heuristic" : { + "file" : "URI/Heuristic.pm", + "version" : "4.20" + }, + "URI::IRI" : { + "file" : "URI/IRI.pm" + }, + "URI::QueryParam" : { + "file" : "URI/QueryParam.pm" + }, + "URI::Split" : { + "file" : "URI/Split.pm" + }, + "URI::URL" : { + "file" : "URI/URL.pm", + "version" : "5.04" + }, + "URI::WithBase" : { + "file" : "URI/WithBase.pm", + "version" : "2.20" + }, + "URI::data" : { + "file" : "URI/data.pm" + }, + "URI::file" : { + "file" : "URI/file.pm", + "version" : "4.21" + }, + "URI::file::Base" : { + "file" : "URI/file/Base.pm" + }, + "URI::file::FAT" : { + "file" : "URI/file/FAT.pm" + }, + "URI::file::Mac" : { + "file" : "URI/file/Mac.pm" + }, + "URI::file::OS2" : { + "file" : "URI/file/OS2.pm" + }, + "URI::file::QNX" : { + "file" : "URI/file/QNX.pm" + }, + "URI::file::Unix" : { + "file" : "URI/file/Unix.pm" + }, + "URI::file::Win32" : { + "file" : "URI/file/Win32.pm" + }, + "URI::ftp" : { + "file" : "URI/ftp.pm" + }, + "URI::gopher" : { + "file" : "URI/gopher.pm" + }, + "URI::http" : { + "file" : "URI/http.pm" + }, + "URI::https" : { + "file" : "URI/https.pm" + }, + "URI::ldap" : { + "file" : "URI/ldap.pm", + "version" : "1.12" + }, + "URI::ldapi" : { + "file" : "URI/ldapi.pm" + }, + "URI::ldaps" : { + "file" : "URI/ldaps.pm" + }, + "URI::mailto" : { + "file" : "URI/mailto.pm" + }, + "URI::mms" : { + "file" : "URI/mms.pm" + }, + "URI::news" : { + "file" : "URI/news.pm" + }, + "URI::nntp" : { + "file" : "URI/nntp.pm" + }, + "URI::pop" : { + "file" : "URI/pop.pm" + }, + "URI::rlogin" : { + "file" : "URI/rlogin.pm" + }, + "URI::rsync" : { + "file" : "URI/rsync.pm" + }, + "URI::rtsp" : { + "file" : "URI/rtsp.pm" + }, + "URI::rtspu" : { + "file" : "URI/rtspu.pm" + }, + "URI::sip" : { + "file" : "URI/sip.pm", + "version" : "0.11" + }, + "URI::sips" : { + "file" : "URI/sips.pm" + }, + "URI::snews" : { + "file" : "URI/snews.pm" + }, + "URI::ssh" : { + "file" : "URI/ssh.pm" + }, + "URI::telnet" : { + "file" : "URI/telnet.pm" + }, + "URI::tn3270" : { + "file" : "URI/tn3270.pm" + }, + "URI::urn" : { + "file" : "URI/urn.pm" + }, + "URI::urn::isbn" : { + "file" : "URI/urn/isbn.pm" + }, + "URI::urn::oid" : { + "file" : "URI/urn/oid.pm" + } + }, + "version" : "1.59" + }, + "URI::SmartURI" : { + "dist" : "URI-SmartURI-0.031", + "module" : "URI::SmartURI", + "mymeta" : { + "abstract" : "Subclassable and hostless URIs", + "author" : [ + "Rafael Kitover, C<< <rkitover at cpan.org> >>", + "Rafael Kitover <rkitover@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "URI-SmartURI", + "no_index" : { + "directory" : [ + "inc", + "t" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42", + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "Class::C3::Componentised" : 0, + "File::Find::Rule" : 0, + "List::MoreUtils" : 0, + "List::Util" : 0, + "Moose" : 0, + "Scalar::Util" : 0, + "Test::More" : 0, + "URI" : "1.51", + "namespace::clean" : 0, + "perl" : "5.008001" + } + } + }, + "provides" : { + "URI::SmartURI" : { + "file" : "lib/URI/SmartURI.pm", + "version" : "0.031" + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://github.com/rkitover/uri-smarturi.git" + } + }, + "version" : "0.031" + }, + "name" : "URI::SmartURI", + "pathname" : "R/RK/RKITOVER/URI-SmartURI-0.031.tar.gz", + "provides" : { + "URI::SmartURI" : { + "file" : "URI/SmartURI.pm", + "version" : "0.031" + } + }, + "version" : "0.031" + }, + "Variable::Magic" : { + "dist" : "Variable-Magic-0.47", + "module" : "Variable::Magic", + "mymeta" : { + "abstract" : "Associate user-defined magic to variables from Perl.", + "author" : [ + "Vincent Pit <perl@profvince.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.59, CPAN::Meta::Converter version 2.112621, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Variable-Magic", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "Config" : 0, + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "Exporter" : 0, + "XSLoader" : 0, + "base" : 0, + "perl" : "5.008" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Variable-Magic" + }, + "homepage" : "http://search.cpan.org/dist/Variable-Magic/", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "http://git.profvince.com/?p=perl%2Fmodules%2FVariable-Magic.git" + } + }, + "version" : "0.47" + }, + "name" : "Variable::Magic", + "pathname" : "V/VP/VPIT/Variable-Magic-0.47.tar.gz", + "provides" : { + "Variable::Magic" : { + "file" : "Variable/Magic.pm", + "version" : "0.47" + } + }, + "version" : "0.47" + }, + "WWW::Mechanize" : { + "dist" : "WWW-Mechanize-1.71", + "module" : "WWW::Mechanize", + "mymeta" : { + "abstract" : "Handy web browsing in a Perl object", + "author" : [ + "Jesse Vincent <jesse@bestpractical.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.59, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "WWW-Mechanize", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Carp" : 0, + "File::Temp" : 0, + "FindBin" : 0, + "Getopt::Long" : 0, + "HTML::Form" : "1.038", + "HTML::HeadParser" : 0, + "HTML::Parser" : "3.33", + "HTML::TokeParser" : "2.28", + "HTML::TreeBuilder" : 0, + "HTTP::Daemon" : 0, + "HTTP::Request" : "1.3", + "HTTP::Server::Simple" : "0.35", + "HTTP::Server::Simple::CGI" : 0, + "HTTP::Status" : 0, + "LWP" : "5.829", + "LWP::UserAgent" : "5.829", + "Pod::Usage" : 0, + "Test::More" : "0.34", + "Test::Warn" : "0.11", + "URI" : "1.36", + "URI::URL" : 0, + "URI::file" : 0, + "perl" : "5.008" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://code.google.com/p/www-mechanize/issues/list" + }, + "homepage" : "https://github.com/bestpractical/www-mechanize", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "x_MailingList" : "http://groups.google.com/group/www-mechanize-users", + "x_Repository" : "https://github.com/bestpractical/www-mechanize" + }, + "version" : "1.71" + }, + "name" : "WWW::Mechanize", + "pathname" : "J/JE/JESSE/WWW-Mechanize-1.71.tar.gz", + "provides" : { + "WWW::Mechanize" : { + "file" : "WWW/Mechanize.pm", + "version" : "1.71" + }, + "WWW::Mechanize::Image" : { + "file" : "WWW/Mechanize/Image.pm" + }, + "WWW::Mechanize::Link" : { + "file" : "WWW/Mechanize/Link.pm" + } + }, + "version" : "1.71" + }, + "WWW::RobotRules" : { + "dist" : "WWW-RobotRules-6.01", + "module" : "WWW::RobotRules", + "mymeta" : { + "abstract" : "database of robots.txt-derived permissions", + "author" : [ + "Gisle Aas <gisle@activestate.com>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "WWW-RobotRules", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "AnyDBM_File" : 0, + "Fcntl" : 0, + "URI" : "1.10", + "perl" : "5.008008" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/gisle/libwww-perl/tree/WWW-RobotRules/master" + }, + "x_MailingList" : "mailto:libwww@perl.org" + }, + "version" : "6.01" + }, + "name" : "WWW::RobotRules", + "pathname" : "G/GA/GAAS/WWW-RobotRules-6.01.tar.gz", + "provides" : { + "WWW::RobotRules" : { + "file" : "WWW/RobotRules.pm", + "version" : "6.01" + }, + "WWW::RobotRules::AnyDBM_File" : { + "file" : "WWW/RobotRules/AnyDBM_File.pm", + "version" : "6.00" + }, + "WWW::RobotRules::InCore" : { + "file" : "WWW/RobotRules.pm" + } + }, + "version" : "6.01" + }, + "Web::Scraper" : { + "dist" : "Web-Scraper-0.36", + "module" : "Web::Scraper", + "mymeta" : { + "abstract" : "Web Scraping Toolkit using HTML and CSS Selectors or XPath expressions", + "author" : [ + "Tatsuhiko Miyagawa <miyagawa@bulknews.net>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.04, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "Web-Scraper", + "no_index" : { + "directory" : [ + "inc", + "t", + "xt" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.62", + "Test::Base" : 0, + "Test::More" : 0, + "Test::Requires" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.62" + } + }, + "runtime" : { + "requires" : { + "HTML::Entities" : 0, + "HTML::Selector::XPath" : "0.03", + "HTML::Tagset" : 0, + "HTML::TreeBuilder" : "3.23", + "HTML::TreeBuilder::XPath" : "0.08", + "LWP" : "5.827", + "Scalar::Util" : 0, + "UNIVERSAL::require" : 0, + "URI" : 0, + "XML::XPathEngine" : "0.08", + "YAML" : 0, + "perl" : "5.008001" + } + } + }, + "release_status" : "stable", + "resources" : { + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://github.com/miyagawa/web-scraper.git" + } + }, + "version" : "0.36" + }, + "name" : "Web::Scraper", + "pathname" : "M/MI/MIYAGAWA/Web-Scraper-0.36.tar.gz", + "provides" : { + "Web::Scraper" : { + "file" : "Web/Scraper.pm", + "version" : "0.36" + }, + "Web::Scraper::Filter" : { + "file" : "Web/Scraper/Filter.pm" + }, + "Web::Scraper::LibXML" : { + "file" : "Web/Scraper/LibXML.pm" + } + }, + "version" : "0.36" + }, + "XML::Parser" : { + "dist" : "XML-Parser-2.41", + "module" : "XML::Parser", + "mymeta" : { + "abstract" : "A perl module for parsing XML documents", + "author" : [ + "Clark Cooper (coopercc@netheaven.com)" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.56, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "XML-Parser", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "LWP" : 0, + "perl" : "5.00405" + } + } + }, + "release_status" : "stable", + "resources" : { + "repository" : { + "url" : "http://github.com/chorny/XML-Parser" + } + }, + "version" : "2.41" + }, + "name" : "XML::Parser", + "pathname" : "T/TO/TODDR/XML-Parser-2.41.tar.gz", + "provides" : { + "XML::Parser" : { + "file" : "XML/Parser.pm", + "version" : "2.41" + }, + "XML::Parser::Expat" : { + "file" : "XML/Parser/Expat.pm", + "version" : "2.41" + }, + "XML::Parser::Style::Debug" : { + "file" : "XML/Parser/Style/Debug.pm" + }, + "XML::Parser::Style::Objects" : { + "file" : "XML/Parser/Style/Objects.pm" + }, + "XML::Parser::Style::Stream" : { + "file" : "XML/Parser/Style/Stream.pm" + }, + "XML::Parser::Style::Subs" : { + "file" : "XML/Parser/Style/Subs.pm" + }, + "XML::Parser::Style::Tree" : { + "file" : "XML/Parser/Style/Tree.pm" + } + }, + "version" : "2.41" + }, + "XML::RSS" : { + "dist" : "XML-RSS-1.49", + "module" : "XML::RSS", + "mymeta" : { + "abstract" : "creates and updates RSS files", + "author" : [ + "Shlomi Fish <shlomif@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "keywords" : [ + "feed", + "feeds", + "generate", + "generating", + "parse", + "parsing", + "rss", + "RSS", + "web-feed", + "web-feeds", + "xml" + ], + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "XML-RSS", + "prereqs" : { + "build" : { + "requires" : { + "Test::Manifest" : "0.9", + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "Module::Build" : "0.36" + } + }, + "runtime" : { + "requires" : { + "DateTime" : 0, + "DateTime::Format::Mail" : 0, + "DateTime::Format::W3CDTF" : 0, + "HTML::Entities" : 0, + "XML::Parser" : "2.23", + "perl" : "5.008" + } + } + }, + "provides" : { + "XML::RSS" : { + "file" : "lib/XML/RSS.pm", + "version" : "1.49" + }, + "XML::RSS::Private::Output::Base" : { + "file" : "lib/XML/RSS/Private/Output/Base.pm", + "version" : 0 + }, + "XML::RSS::Private::Output::Roles::ImageDims" : { + "file" : "lib/XML/RSS/Private/Output/Roles/ImageDims.pm", + "version" : 0 + }, + "XML::RSS::Private::Output::Roles::ModulesElems" : { + "file" : "lib/XML/RSS/Private/Output/Roles/ModulesElems.pm", + "version" : 0 + }, + "XML::RSS::Private::Output::V0_9" : { + "file" : "lib/XML/RSS/Private/Output/V0_9.pm", + "version" : 0 + }, + "XML::RSS::Private::Output::V0_91" : { + "file" : "lib/XML/RSS/Private/Output/V0_91.pm", + "version" : 0 + }, + "XML::RSS::Private::Output::V1_0" : { + "file" : "lib/XML/RSS/Private/Output/V1_0.pm", + "version" : 0 + }, + "XML::RSS::Private::Output::V2_0" : { + "file" : "lib/XML/RSS/Private/Output/V2_0.pm", + "version" : 0 + } + }, + "release_status" : "stable", + "resources" : { + "homepage" : "http://perl-rss.sourceforge.net/", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "url" : "https://svn.perl.org/modules/XML-RSS/trunk" + } + }, + "version" : "1.49" + }, + "name" : "XML::RSS", + "pathname" : "S/SH/SHLOMIF/XML-RSS-1.49.tar.gz", + "provides" : { + "XML::RSS" : { + "file" : "XML/RSS.pm", + "version" : "1.49" + }, + "XML::RSS::Private::Output::Base" : { + "file" : "XML/RSS/Private/Output/Base.pm" + }, + "XML::RSS::Private::Output::Roles::ImageDims" : { + "file" : "XML/RSS/Private/Output/Roles/ImageDims.pm" + }, + "XML::RSS::Private::Output::Roles::ModulesElems" : { + "file" : "XML/RSS/Private/Output/Roles/ModulesElems.pm" + }, + "XML::RSS::Private::Output::V0_9" : { + "file" : "XML/RSS/Private/Output/V0_9.pm" + }, + "XML::RSS::Private::Output::V0_91" : { + "file" : "XML/RSS/Private/Output/V0_91.pm" + }, + "XML::RSS::Private::Output::V1_0" : { + "file" : "XML/RSS/Private/Output/V1_0.pm" + }, + "XML::RSS::Private::Output::V2_0" : { + "file" : "XML/RSS/Private/Output/V2_0.pm" + } + }, + "version" : "1.49" + }, + "XML::Simple" : { + "dist" : "XML-Simple-2.18", + "module" : "XML::Simple", + "mymeta" : { + "abstract" : "Easy API to maintain XML (esp config files)", + "author" : [ + "Grant McLean <grantm@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.62, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "XML-Simple", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::Simple" : "0.41", + "XML::Parser" : 0 + } + } + }, + "release_status" : "stable", + "version" : "2.18" + }, + "name" : "XML::Simple", + "pathname" : "G/GR/GRANTM/XML-Simple-2.18.tar.gz", + "provides" : { + "XML::Simple" : { + "file" : "XML/Simple.pm", + "version" : "2.18" + } + }, + "version" : "2.18" + }, + "XML::XPathEngine" : { + "dist" : "XML-XPathEngine-0.13", + "module" : "XML::XPathEngine", + "mymeta" : { + "abstract" : "a re-usable XPath engine for DOM-like trees", + "author" : [ + "Michel Rodriguez <mirod@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.59, CPAN::Meta::Converter version 2.112150", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "XML-XPathEngine", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "Test::More" : 0 + } + } + }, + "release_status" : "stable", + "version" : "0.13" + }, + "name" : "XML::XPathEngine", + "pathname" : "M/MI/MIROD/XML-XPathEngine-0.13.tar.gz", + "provides" : { + "XML::XPathEngine" : { + "file" : "XML/XPathEngine.pm", + "version" : "0.13" + }, + "XML::XPathEngine::Boolean" : { + "file" : "XML/XPathEngine/Boolean.pm" + }, + "XML::XPathEngine::Expr" : { + "file" : "XML/XPathEngine/Expr.pm" + }, + "XML::XPathEngine::Function" : { + "file" : "XML/XPathEngine/Function.pm" + }, + "XML::XPathEngine::Literal" : { + "file" : "XML/XPathEngine/Literal.pm" + }, + "XML::XPathEngine::LocationPath" : { + "file" : "XML/XPathEngine/LocationPath.pm" + }, + "XML::XPathEngine::NodeSet" : { + "file" : "XML/XPathEngine/NodeSet.pm" + }, + "XML::XPathEngine::Number" : { + "file" : "XML/XPathEngine/Number.pm" + }, + "XML::XPathEngine::Root" : { + "file" : "XML/XPathEngine/Root.pm" + }, + "XML::XPathEngine::Step" : { + "file" : "XML/XPathEngine/Step.pm" + }, + "XML::XPathEngine::Variable" : { + "file" : "XML/XPathEngine/Variable.pm" + } + }, + "version" : "0.13" + }, + "YAML" : { + "dist" : "YAML-0.77", + "module" : "YAML", + "mymeta" : { + "abstract" : "YAML Ain't Markup Language (tm)", + "author" : [ + "Ingy döt Net <ingy@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.01, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "YAML", + "no_index" : { + "directory" : [ + "inc", + "t", + "xt" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "perl" : "5.008001" + } + } + }, + "release_status" : "stable", + "resources" : { + "homepage" : "http://github.com/ingydotnet/yaml-pm/tree", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://github.com/ingydotnet/yaml-pm.git" + } + }, + "version" : "0.77", + "x_module_name" : "YAML" + }, + "name" : "YAML", + "pathname" : "I/IN/INGY/YAML-0.77.tar.gz", + "provides" : { + "Test::YAML" : { + "file" : "Test/YAML.pm", + "version" : "0.77" + }, + "Test::YAML::Filter" : { + "file" : "Test/YAML.pm" + }, + "YAML" : { + "file" : "YAML.pm", + "version" : "0.77" + }, + "YAML::Any" : { + "file" : "YAML/Any.pm", + "version" : "0.77" + }, + "YAML::Dumper" : { + "file" : "YAML/Dumper.pm", + "version" : "0.77" + }, + "YAML::Dumper::Base" : { + "file" : "YAML/Dumper/Base.pm", + "version" : "0.77" + }, + "YAML::Error" : { + "file" : "YAML/Error.pm", + "version" : "0.77" + }, + "YAML::Loader" : { + "file" : "YAML/Loader.pm", + "version" : "0.77" + }, + "YAML::Loader::Base" : { + "file" : "YAML/Loader/Base.pm", + "version" : "0.77" + }, + "YAML::Marshall" : { + "file" : "YAML/Marshall.pm", + "version" : "0.77" + }, + "YAML::Mo" : { + "file" : "YAML/Mo.pm" + }, + "YAML::Node" : { + "file" : "YAML/Node.pm", + "version" : "0.77" + }, + "YAML::Tag" : { + "file" : "YAML/Tag.pm", + "version" : "0.77" + }, + "YAML::Type::blessed" : { + "file" : "YAML/Types.pm" + }, + "YAML::Type::code" : { + "file" : "YAML/Types.pm" + }, + "YAML::Type::glob" : { + "file" : "YAML/Types.pm" + }, + "YAML::Type::ref" : { + "file" : "YAML/Types.pm" + }, + "YAML::Type::regexp" : { + "file" : "YAML/Types.pm" + }, + "YAML::Type::undef" : { + "file" : "YAML/Types.pm" + }, + "YAML::Types" : { + "file" : "YAML/Types.pm", + "version" : "0.77" + }, + "YAML::Warning" : { + "file" : "YAML/Error.pm" + }, + "yaml_mapping" : { + "file" : "YAML/Node.pm" + }, + "yaml_scalar" : { + "file" : "YAML/Node.pm" + }, + "yaml_sequence" : { + "file" : "YAML/Node.pm" + } + }, + "version" : "0.77" + }, + "aliased" : { + "dist" : "aliased-0.30", + "module" : "aliased", + "mymeta" : { + "abstract" : "Use shorter versions of class names.", + "author" : [ + "Curtis \"Ovid\" Poe <ovid@cpan.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "aliased", + "prereqs" : { + "runtime" : { + "requires" : { + "Test::More" : 0 + } + } + }, + "provides" : { + "aliased" : { + "file" : "lib/aliased.pm", + "version" : "0.30" + } + }, + "release_status" : "stable", + "resources" : {}, + "version" : "0.30" + }, + "name" : "aliased", + "pathname" : "O/OV/OVID/aliased-0.30.tar.gz", + "provides" : { + "aliased" : { + "file" : "aliased.pm", + "version" : "0.30" + } + }, + "version" : "0.30" + }, + "local::lib" : { + "dist" : "local-lib-1.008004", + "module" : "local::lib", + "mymeta" : { + "abstract" : "create and use a local lib/ for perl modules with PERL5LIB", + "author" : [ + "Matt S Trout <mst@shadowcat.co.uk> http://www.shadowcat.co.uk/" + ], + "dynamic_config" : 0, + "generated_by" : "Module::Install version 1.00, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "local-lib", + "no_index" : { + "directory" : [ + "inc", + "t", + "xt" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.42" + } + }, + "runtime" : { + "requires" : { + "CPAN" : "1.82", + "ExtUtils::Install" : "1.43", + "ExtUtils::MakeMaker" : "6.31", + "Module::Build" : "0.36", + "perl" : "5.008001" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=local-lib" + }, + "homepage" : "http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit/local-lib.git", + "license" : [ + "http://dev.perl.org/licenses/" + ], + "repository" : { + "type" : "git", + "url" : "git://git.shadowcat.co.uk/p5sagit/local-lib.git" + } + }, + "version" : "1.008004" + }, + "name" : "local::lib", + "pathname" : "A/AP/APEIRON/local-lib-1.008004.tar.gz", + "provides" : { + "lib::core::only" : { + "file" : "lib/core/only.pm" + }, + "local::lib" : { + "file" : "local/lib.pm", + "version" : "1.008004" + } + }, + "version" : "1.008004" + }, + "namespace::autoclean" : { + "dist" : "namespace-autoclean-0.12", + "module" : "namespace::autoclean", + "mymeta" : { + "abstract" : "Keep imports out of your namespace", + "author" : [ + "Florian Ragwitz <rafl@debian.org>" + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 4.200001, CPAN::Meta::Converter version 2.101610, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "namespace-autoclean", + "prereqs" : { + "build" : { + "requires" : { + "Moose::Role" : 0, + "Sub::Name" : 0, + "Test::More" : 0 + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "6.31" + } + }, + "runtime" : { + "requires" : { + "B::Hooks::EndOfScope" : 0, + "Class::MOP" : "0.80", + "List::Util" : 0, + "namespace::clean" : "0.20" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=namespace_autoclean" + }, + "homepage" : "http://search.cpan.org/dist/namespace_autoclean", + "repository" : { + "type" : "git", + "url" : "git://github.com/rafl/namespace_autoclean.git" + } + }, + "version" : "0.12", + "x_Dist_Zilla" : { + "plugins" : [ + { + "class" : "Dist::Zilla::Plugin::GatherDir", + "name" : "@FLORA/@Basic/GatherDir", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::PruneCruft", + "name" : "@FLORA/@Basic/PruneCruft", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::ManifestSkip", + "name" : "@FLORA/@Basic/ManifestSkip", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::MetaYAML", + "name" : "@FLORA/@Basic/MetaYAML", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::License", + "name" : "@FLORA/@Basic/License", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::Readme", + "name" : "@FLORA/@Basic/Readme", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::ExtraTests", + "name" : "@FLORA/@Basic/ExtraTests", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::ExecDir", + "name" : "@FLORA/@Basic/ExecDir", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::ShareDir", + "name" : "@FLORA/@Basic/ShareDir", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::MakeMaker", + "name" : "@FLORA/@Basic/MakeMaker", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::Manifest", + "name" : "@FLORA/@Basic/Manifest", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::TestRelease", + "name" : "@FLORA/@Basic/TestRelease", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::ConfirmRelease", + "name" : "@FLORA/@Basic/ConfirmRelease", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::UploadToCPAN", + "name" : "@FLORA/@Basic/UploadToCPAN", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::MetaConfig", + "name" : "@FLORA/MetaConfig", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::MetaJSON", + "name" : "@FLORA/MetaJSON", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::PkgVersion", + "name" : "@FLORA/PkgVersion", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::PodSyntaxTests", + "name" : "@FLORA/PodSyntaxTests", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::NoTabsTests", + "name" : "@FLORA/NoTabsTests", + "version" : "0.01" + }, + { + "class" : "Dist::Zilla::Plugin::PodCoverageTests", + "name" : "@FLORA/PodCoverageTests", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::MetaResources", + "name" : "@FLORA/MetaResources", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::Authority", + "name" : "@FLORA/Authority", + "version" : "0.01" + }, + { + "class" : "Dist::Zilla::Plugin::EOLTests", + "name" : "@FLORA/EOLTests", + "version" : "0.02" + }, + { + "class" : "Dist::Zilla::Plugin::PodWeaver", + "name" : "@FLORA/PodWeaver", + "version" : "3.101640" + }, + { + "class" : "Dist::Zilla::Plugin::AutoPrereqs", + "name" : "@FLORA/AutoPrereqs", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":InstallModules", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":TestFiles", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ExecFiles", + "version" : "4.200001" + }, + { + "class" : "Dist::Zilla::Plugin::FinderCode", + "name" : ":ShareFiles", + "version" : "4.200001" + } + ], + "zilla" : { + "class" : "Dist::Zilla::Dist::Builder", + "config" : { + "is_trial" : 0 + }, + "version" : "4.200001" + } + }, + "x_authority" : "cpan:FLORA" + }, + "name" : "namespace::autoclean", + "pathname" : "/authors/id/B/BO/BOBTFISH/namespace-autoclean-0.12.tar.gz", + "provides" : { + "namespace::autoclean" : { + "file" : "namespace/autoclean.pm", + "version" : "0.12" + } + }, + "version" : "0.12" + }, + "namespace::clean" : { + "dist" : "namespace-clean-0.21", + "module" : "namespace::clean", + "mymeta" : { + "abstract" : "Keep imports and functions out of your namespace", + "author" : [ + "Robert 'phaylon' Sedlacek <rs@474.at>, Florian Ragwitz <rafl@debian.org>, Jesse Luehrs <doy@tozt.net>" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 6.57_05, CPAN::Meta::Converter version 2.112150", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : "2" + }, + "name" : "namespace-clean", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "Test::More" : "0.88" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : 0 + } + }, + "runtime" : { + "requires" : { + "B::Hooks::EndOfScope" : "0.07", + "Package::Stash" : "0.23" + } + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "http://rt.cpan.org/Public/Dist/Display.html?Name=namespace-clean" + }, + "homepage" : "http://search.cpan.org/dist/namespace-clean", + "repository" : { + "type" : "git", + "url" : "git://git.shadowcat.co.uk/p5sagit/namespace-clean.git" + } + }, + "version" : "0.21" + }, + "name" : "namespace::clean", + "pathname" : "R/RI/RIBASUSHI/namespace-clean-0.21.tar.gz", + "provides" : { + "namespace::clean" : { + "file" : "namespace/clean.pm", + "version" : "0.21" + } + }, + "version" : "0.21" + } + }, + "version" : "0.9" +} diff --git a/conf/general.yml-example b/conf/general.yml-example index 1418b0810..06af11a55 100644 --- a/conf/general.yml-example +++ b/conf/general.yml-example @@ -52,7 +52,9 @@ IPHONE_URL: '' # Log file (used in test harness, and later in admin scripts) HTTPD_ERROR_LOG: '/var/log/apache/error.log' -ALLOWED_COBRANDS: 'cobrand_one|cobrand_two' +ALLOWED_COBRANDS: + - cobrand_one + - cobrand_two: 'hostname_substring2' # How many items are returned in the GeoRSS feeds by default RSS_LIMIT: '20' diff --git a/conf/packages b/conf/packages index 766e7747c..21ee0a862 100644 --- a/conf/packages +++ b/conf/packages @@ -16,7 +16,6 @@ libsoap-lite-perl libstatistics-distributions-perl liburi-perl libwww-perl -libwww-perl libxml-rss-perl memcached perl @@ -26,7 +25,6 @@ perlmagick libjson-perl libimage-size-perl libmath-bigint-gmp-perl -libtext-template-perl gettext libtest-exception-perl libipc-run3-perl diff --git a/notes/INSTALL b/notes/INSTALL deleted file mode 100644 index bb28e60fa..000000000 --- a/notes/INSTALL +++ /dev/null @@ -1,141 +0,0 @@ -Installing FixMyStreet -====================== - -mySociety applications have generally been run on Debian systems. Other Linux -distributions (and more) may well work but may also require some tweaking. - -Clone the repository (you've probably already done this): - git clone git://github.com/mysociety/fixmystreet.git -and be sure to run: - git submodule update --init -inside to fetch the shared commonlib submodule. - -conf/packages is a list of Debian packages that are needed, so install them if -you're on Debian/Ubuntu. You'll also probably need to install lots of CPAN -modules, see the section on that below. - -FixMyStreet expects a PostgreSQL database, so set one of them up - the schema -is available in db/schema.sql. You will also need to load in db/alert_types.sql -to populate the alert types table. - -Copy conf/general.yml-example to conf/general.yml and set it up appropriately: -* provide the relevant database connection details -* the BASE_URL to be where your test site will run - eg 'http://localhost' -* set UPLOAD_DIR and GEO_CACHE to your preferred values -* MAP_TYPE - OSM is probably the best one to try to start with, it's being - successfully used. - -Environment setup ------------------ - -There is a little script that is used to set up the correct environment needed -for FMS to run (perl library paths, cpan install locations, bin paths etc). It -should be eval-ed in a bash shell to set environment variables: - eval `./setenv.pl` - -Cron scripts can be run through the bin/cron-wrapper script in order to be run -within the right environment. - -CPAN module dependencies ------------------------- - -There are many CPAN dependencies that should be dealt with using -module-manage.pl which takes care of fetching specific versions of packages -from CPAN and building them. To install all the CPAN packages needed: - - eval `./setenv.pl` - module-manage.pl setup - -Look in the perl-external directory for details. Notably the following are important: - -urls.txt - url to the specific packages to fetch -modules.txt - list of all modules that need to be built -minicpan/ - local subset of cpan - used as source for all packages -local-lib - where the cpan modules get built to -lib - some initial modules needed for bootstrap -bin - scripts to make it all work - -Read the perl-external/bin/module-manage.pl code to see how it all works. It is -basically a wrapper around cpanm (which builds the packages) and dpan (which -helps maintain the fake cpan subset). - -If you need to add a module do it using: - - module-manage.pl add Module::To::Add - -and it will update all the relevant bits. - -If a module won't build (Test::WWW::Mechanize and HTTP::Server::Simple fail -tests for me but the failures are not pertinent) then the module-manage script -will bail out. Look in ~/.cpanm/build_log to see what went wrong. You can force -an install if the test failures are not important by running cpanm directly: - - cpanm \ - --mirror /absolute/path/to/perl-external/minicpan \ - --mirror-only \ - --force \ - Test::WWW::Mechanize - -Hopefully once it is all built we can automate the running of module-manage.pl -in order to make sure that the setup is current. - -Note: Others are starting to work on this and it might be a good idea to switch -to their output: -http://blogs.perl.org/users/sebastian_willert/2011/03/how-i-distribute-my-projects.html - -Notes ------ - -* no-update-server is a shell script used by NUUG for setting up - www.fiksgatami.no using the FixMyStreet codebase. - -Running the code -================ - -Development ------------ - -Start the catalyst dev server using: - - CATALYST_DEBUG=1 ./script/fixmystreet_app_server.pl -r - -CATALYST_DEBUG turns on the very verbose debug output which is helpful to see what the code is actually doing. The '-r' flag watches for files to change and then restarts the dev server. - -Production ----------- - -mySociety currently use Apache, our httpd.conf performs a few redirect checks -and then passes everything else to the Catalyst app using FastCGI. Other -options are available with Catalyst, including PSGI, mod_perl, and so on. - -What's where in the code? -========================= - -FixMyStreet::App is a fairly standard Catalyst app; there aren't any really big -surprises. - -Note that the FixMyStreet.pm file is used though to abstract some config -related things. The FixMyStreet->test_mode(1) which will do things like send -all emails to a memory queue for the test scripts. test_mode should only be -used in test scripts, and so is different from setting STAGING to true. - -Testing -======= - -There are several tests in the t directory - organized into subdirs. Note that -there is a module FixMyStreet::TestMech that abstracts some things like logging -in as a user and grabbing all the form error messages. This makes testing much -slicker and less fiddly. - -Run all the tests (within the correct environment) using: - - prove -lr t - -or a specific test in verbose mode using: - - prove -lv t/app/controller/report_new.t - -For all the lovely options do 'prove --help'. Note I've made no attempt to make -the tests be able to run in parallel, the database fiddling would not be worth -it. The tests currently assume MAPIT_URL is set to the UK version. - diff --git a/notes/INSTALL.pod b/notes/INSTALL.pod new file mode 100644 index 000000000..b795a0043 --- /dev/null +++ b/notes/INSTALL.pod @@ -0,0 +1,284 @@ +=head1 Installing FixMyStreet + +=head1 DOWNLOADING + +Fetch the latest version from L<http://github.com/mysociety/fixmystreet> + +At the moment the best way is to clone it using git: + + git clone https://github.com/mysociety/fixmystreet.git + +You'll then need to install mySociety's common library of code by running the +following command from inside the fixmystreet directory: + + git submodule update --init + +=head1 REQUIREMENTS + +On the server you are installing FixMyStreet on you will need the following things: + +=head2 Software requirements + +=over + +=item * + +PostgreSQL. + +=item * + +Perl 5.8 or above + +=item * + +ImageMagick and the perl bindings. + +=item * + +A webserver that supports FastCGI + +=item * + +gettext + +=item * + +The CSS for FixMyStreet is generated from SCSS sources so you will need a SCSS +to CSS convertor. You can get one from L<http://sass-lang.com/> + +=back + +If you're expecting a lot of traffic it's recommended that you install memcached: L<http://memcached.org/> + +If you're using a Debian based Linux distribution then the packages to install +some required dependencies (though not all the required Perl modules) are +listed in C<conf/packages>. To install all of them you can run: + + xargs -a conf/packages apt-get install + +Note, you will need to either be logged in as root or to use + + sudo xargs -a conf/packages apt-get install + +for this to work. + +=head2 Service dependencies + +For most uses of FixMyStreet you'll also need access to a MaPit server with +data for the types of bodies you are reporting issues to. For more details on +how to install MaPit see the mapit pypi page: L<http://pypi.python.org/pypi/django-mapit/> + +If you are in the UK then you can always use the mySociety's MaPit: L<http://mapit.mysociety.org> +although please check with us if you are expecting to generate a lot of +requests. + +You will also need a Tile Server to serve up Map tiles. FixMyStreet can use +Google, Bing and OpenStreetMap Tile servers. + +Finally, you will need a geolocation service to turn addresses into longitude +and latitudes. FixMyStreet currently includes code to use both Bing and Google +geolocation services. + +=head1 DETAILED INSTALLATION INSTRUCTIONS + +=head2 Unpacking the Code + +Once you've downloaded the code you should unpack it. The best place to do this +is in the location you want the web server vhost to be. + +=head2 Creating the database + +The default settings file assumes the database is called fms and the user the same. +You can change these if you like. + +=head2 Set up the database + +Once you've created the database you can use the sql in C<db/schema.sql> to create the required +tables, triggers and stored procedures. You will also need to run +C<db/alert_types.sql> which +populates the alert_types table. + +=head2 Install Perl modules + +FixMyStreet uses a number of CPAN modules which are installed by the +C<bin/install_perl_modules> script, so run that now. This will install them +into a directory called local. + +It uses cpanminus and Carton under the hood but should install these +of they are missing. You may need to install some source packages to +allow some of the included modules to be built, including: + +=over + +=item * + +expat + +=item * + +Postgresql + +=item * + +The GMP math library + +=back + +You will also need development tools installed. If you have installed the +above source packages from distribution packages this should also install +the required development tools. + +=head2 Set up Webserver + +It is recommended that you run FixMyStreet using FastCGI. It should also be +possible to run it using Plack/PSGI. + +There is an example Apache vhost configuration file in C<conf/httpd.conf-example> +which contains a sample configuration and the required redirect rules. + +If you are using Apache and the sample configuration you will need the following +modules enabled: + +=over + +=item * + +mod_rewrite + +=item * + +mod_proxy + +=item * + +mod_expires + +=item * + +mod_fastcgi + +=back + +For most Linux distributuions you should be able to install these using the distribution's +packaging system. + +=head1 SETTINGS + +The settings for FixMyStreet are defined in C<conf/general.yml> using the YAML +markup language. There are some defaults in C<conf/general.yml-example> which +you should copy to C<conf/general.yml>. + +The bare minimum of settings you will need to fill in or update are: + +=over + +=item FMS_DB_PASS + +This is the password for the database. + +=item BASE_URL + +The URL for the homepage of your FixMyStreet install. + +=item EMAIL_DOMAIN + +The email domain that emails will be sent from + +=item CONTACT_EMAIL + +The email address to be used on the site for the contact us form. + +=item STAGING_SITE + +If this is 1 then all email ( alerts and reports ) will be sent to the +contact email address. Use this for development sites. + +=item UPLOAD_DIR + +This is the location where images will be stored when they are uploaded. +It should be accessible by and writeable by the FixMyStreet process. + +=item GEO_CACHE + +This is the location where Geolocation data will be cached. +It should be accessible by and writeable by the FixMyStreet process. + +=back + +If you are using Bing or Google maps you should also set one of +BING_MAPS_API_KEY or GOOGLE_MAPS_API_KEY. + +If you are using a MaPit install you should update MAPIT_URL. + +=head2 Generate CSS + +There is a script, bin/make_css, that uses sass (L<http://sass-lang.com/>) to +convert the SCSS files to CSS files. + +=head2 Restart the webserver + +At this point you be able to restart the webserver and see your FixMyStreet +installation at the configured URL. + +=head2 Cron jobs + +There is an example crontab in C<conf/crontab.ugly>. At the moment this is in +the format used by mySociety's internal deployment tools. To convert this to +a valid crontab the following should be done: + +=over + +=item * + +Replace C<!!(*= $user *)!!> with the name of the user the cron should run under + +=item * + +Replace C<!!(* $vhost *)!!> with the path to the FixMyStreet code. + +=back + +=head2 Check it's working + +You can run the unit tests using C<prove -r t> in the FixMyStreet directory. Note +that this may leave entries in your database at the moment and should not be run +on a live site. + +=head2 Next Steps + +The admin site should be protected using HTTP AUTH. + +Customise your install using Templates, CSS and a Cobrand module. See C<notes/customisation.pod> +for details. + +Add contact details for authorities and categories using the admin interface. + +Add authority data to the MaPit install if required. + +=head1 COMMON PROBLEMS + +=head2 locale + +By default FixMyStreet uses the en_GB.UTF-8 locale. If it is not installed then +it may not start + +=head2 Template caching + +FixMyStreet caches compiled templates alongside the source files so the templates +directory needs to be writable by the process that is running FixMyStreet. + +=head2 Image::Magick perl module + +If your OS has a way to install a binary version of Image::Magick then it's recommended +that you do that rather than install via CPAN. + +=head2 Missing Perl modules + +We think we've included all the modules you should need to run and develop FixMyStreet on your +machine but it we've missed one (please let us know if this is the case), or you want to add one +for something you are developing then you can do so using: + + ./bin/cron-wrapper ./local/bin/carton install Module::To::Add + +which will install the module into the local directory. C<./bin/cron-wrapper> is a script to +make sure the correct library paths are set up for running scripts. diff --git a/notes/customisation.pod b/notes/customisation.pod new file mode 100644 index 000000000..04bfb6e1d --- /dev/null +++ b/notes/customisation.pod @@ -0,0 +1,205 @@ +=head1 Customising FixMyStreet + +This document explains how to tailor the default installation of +FixMyStreet to your requirements, including limiting the geographic +area it accepts queries for and translating the text. + +It also includes information about how to change the design. + +=head1 OVERVIEW + +FixMyStreet implements a Cobrand system in order to allow customisation +of the default behavior. The Cobrand is made up of a set of templates for +the Cobrand and a Cobrand module that contains code that customises the +way the Cobrand behaves. There are defaults for both of these so the +Cobrand only needs to override things that are specific to it. + +Customisations should be implemented like this as this means that any +upgrade to FixMyStreet will not overwrite your changes. + +For a cobrand to work then it should have the same name as your site, +e.g if your site is www.FixMyPark.com then your Cobrand should be +called FixMyPark. + +The default Cobrand is called Default. + +=head1 TEMPLATES + +Templates are found in the templates directory. Within that there are +seperate directories for web templates and email templates. Under each +of these there is a directory for each Cobrand. In our FixMyPark example +this would be C<templates/web/fixmypark> for the web templates and +C<templates/email/fixmypark> for the email templates. + +The full set of templates is stored in the default Cobrand and if no +equivalent template is found in a Cobrand directory FixMyStreet will +use the default template. + +At a bare minimum you will probably want to copy the header and footer +web templates found in C<templates/web/default/header.html> and +C<templates/web/default/footer.html> into your Cobrand and make appropriate +changes. + +The other template you should make your own version of is the FAQ which +is in C<templates/web/default/faq-en-gb.html> + +=head1 CSS + +The CSS is stored in web/css/ under which there are directories for Cobrands +but this is only by custom. The loading of the css is controled by the header +templates. Note that FixMyStreet uses sccs files to generate our CSS so by there +are no CSS files until C<bin/make_css> has been run. + +The CSS provided with FixMyStreet uses CSS3 media queries in order to adapt +the layout to work on different devices. + +The CSS is structured into two main files: + +=over + +=item core.css + +This contains all the styling for the content of the pages. This should not +need changed unless you are significantly changing the layout of the site. + +=item main.css + +This contains the CSS for the header and footer as well as the colour scheme. + +=back + +=head1 Cobrand modules + +Much of the rest of the customisation takes place in the Cobrand modules. These +are automatically loaded according to the current Cobrand and can be found in +C<perllib/FixMyStreet/Cobrands/>. There is a default Cobrand ( Default.pm ) which +all Cobrands should inherit from. A Cobrand module can then override any of the +methods from the default Cobrand. + +FixMyStreet uses the hostname of the current request along with the contents +of the C<ALLOWED_COBRANDS> config option to determine which cobrand to use. +C<ALLOWED_COBRANDS> is a list of cobrand names with an optional hostname match. +override. If there is no hostname override then the first cobrand name that +matches all or part of the hostname of the current request is used. If there is +a hostname override then that is compared against the hostname of the current +request. For example if C<ALLOWED_COBRANDS> is + + ALLOWED_COBRANDS: + - fixmypark_fr: 'fr.fixmypark' + - fixmypark + +then a request to www.fixmypark.com will use the fixmypark cobrand but a +request to fr.fixmypark.com will use fixmypark_fr. If no Cobrand listed in +C<ALLOWED_COBRANDS> matches then the default Cobrand will be used. + +This means you can provide multiple Cobrands for the site if you require, e.g. +for providing different languages, and FixMyStreet will use the first match +listed in C<ALLOWED_COBRANDS>. + +Many of the functions in the Cobrand module are used by FixMyStreet in the UK +to allow the site to offer versions localised to a single authority and should +not be needed for most installs. Listed below are the most useful options that +can be changed. + +=over + +=item site_title + +This should be set to the name of your site. + +=item country + +This should be set to the two letter ISO code for the country your site is for. + +=item disambiguate_location + +This is used by the Geocoding module of FixMyStreet to constrain the area for +which results are returned when locating an address. It should return a hash +reference of parameters that are compatible with the arguments of the geocoding module +you are using. + +At a most basic level it should limit it to the country you are in: + + sub disambiguate_location { + return { + country => 'uk', + }; + } + +You can limit it to a smaller area using bounding boxes to contrain the area +that the geocoder will consider: + + sub disambiguate_location { + return { + centre => '52.688198,-1.804966', + span => '0.1196,0.218675', + bounds => [ '52.807793,-1.586291', '52.584891,-1.963232' ], + }; + } + +The centre and span are used by the Google geocoding API and the bounds by +Bing. + +Note that these areguments are only as good a limiting results as the API +that they are used by. + +=item geocode_postcode + +This function is used to convert postcodes entered into a latitude and +longitude. If the text passed is not a valid postcode then an error should +be returned. If you do not want to use postcodes and always use a geocoding +service then always return an error. + +If the postcode is valid and can be converted then the return value should +look like this: + + return { latitude => $latitude, longitude => $longitude }; + +If there is an error it should look like this: + + return { error => $error_message }; + +=item find_closest and find_closest_address_for_rss + +These are used to provide information on the closest street to the point of +the address in reports and rss feeds or alerts. + +=item allow_photo_upload + +Return 0 to disable the photo upload field. + +=item allow_photo_display + +Return 0 to disable the display of uploaded photos. + +=item area_types + +If you are using MaPit alongside FixMyStreet this should return a +list of the area type codes that the site will handle. This is used +to filter the data returned from MaPit so that only appropriate areas are +displayed. + +=item remove_redundant_councils + +This is used to filter out any overlapping jurisdictions from MaPit results +where only one of the authorities actually has reponsability for the events +reported by the site. An example would be be a report in a city where MaPit +has an id for the city council and the state council but problems are only +reported to the state. In this case you would remove the id for the the city +council from the results. + +=item short_name + +This is used to turn the full authority name returned by MaPit into a short +name. + +=back + +=head1 Translations and Language + +The translations for FixMyStreet are stored as gettext files and the +language for a Cobrand is set in the C<set_lang_and_domain> call of +the Cobrand module. + +The templates use the C<loc> method to pass strings to gettext for +translation. diff --git a/notes/glossary.txt b/notes/glossary.txt index 0c533a944..5a86e5a63 100644 --- a/notes/glossary.txt +++ b/notes/glossary.txt @@ -1,12 +1,5 @@ Unfamiliar terms that you may come across in the code: - -BCI: Broken Civic Infrastructure - project name before it became FixMyStreet - -still to be found used in some config variable names - MaPit: The mySociety database and web service that maps postcodes and points to current or past administrative area information and polygons for all the United Kingdom. http://mapit.mysociety.org/ - -EvEl: A generic email sending and mailing list functionality, with bounce -detection: https://secure.mysociety.org/cvstrac/dir?d=mysociety/services/EvEl diff --git a/perllib/CrossSell.pm b/perllib/CrossSell.pm index 4a0f31ea8..f9a02a61b 100644 --- a/perllib/CrossSell.pm +++ b/perllib/CrossSell.pm @@ -189,25 +189,25 @@ sub display_advert ($$;$%) { #$c->stash->{scratch} = 'advert=demclub0'; #return display_democracyclub(); - return <<EOF; -<div id="advert_thin"> -<p>Do you have an issue that’s too big for FixMyStreet? -It could be time to petition your council. Try our new site: -<h2 style="margin-top:0; font-size: 150%"> -<a href="http://www.petitionyourcouncil.com/">PetitionYourCouncil</a></p> -</h2> -</div> -EOF +# return <<EOF; +#<div id="advert_thin"> +#<p>Do you have an issue that’s too big for FixMyStreet? +#It could be time to petition your council. Try our new site: +#<h2 style="margin-top:0; font-size: 150%"> +#<a href="http://www.petitionyourcouncil.com/">PetitionYourCouncil</a></p> +#</h2> +#</div> +#EOF #unless (defined $data{done_tms} && $data{done_tms}==1) { - #$c->stash->{scratch} = 'advert=news'; - #my $auth_signature = ''; - #unless (defined $data{emailunvalidated} && $data{emailunvalidated}==1) { - # $auth_signature = mySociety::AuthToken::sign_with_shared_secret($email, mySociety::Config::get('AUTH_SHARED_SECRET')); - #} - #return '<div style="margin: 0 5em; border-top: dotted 1px #666666;">' - # . display_news_form(email => $email, name => $name, signed_email => $auth_signature) - # . '</div>'; + $c->stash->{scratch} = 'advert=news'; + my $auth_signature = ''; + unless (defined $data{emailunvalidated} && $data{emailunvalidated}==1) { + $auth_signature = mySociety::AuthToken::sign_with_shared_secret($email, mySociety::Config::get('AUTH_SHARED_SECRET')); + } + return '<div style="margin: 0 5em; border-top: dotted 1px #666666;">' + . display_news_form(email => $email, name => $name, signed_email => $auth_signature) + . '</div>'; #} my @adverts = ( diff --git a/perllib/FixMyStreet/App/Controller/Photo.pm b/perllib/FixMyStreet/App/Controller/Photo.pm index 3ca7f13a9..8711b19e9 100644 --- a/perllib/FixMyStreet/App/Controller/Photo.pm +++ b/perllib/FixMyStreet/App/Controller/Photo.pm @@ -94,8 +94,7 @@ sub index :LocalRegex('^(c/)?(\d+)(?:\.(full|tn|fp))?\.jpeg$') { sub output : Private { my ( $self, $c, $photo ) = @_; - my $dt = DateTime->now(); - $dt->set_year( $dt->year + 1 ); + my $dt = DateTime->now()->add( years => 1 ); $c->res->content_type( 'image/jpeg' ); $c->res->header( 'expires', DateTime::Format::HTTP->format_datetime( $dt ) ); diff --git a/perllib/FixMyStreet/App/Controller/Reports.pm b/perllib/FixMyStreet/App/Controller/Reports.pm index 5d70ae113..e7620f755 100644 --- a/perllib/FixMyStreet/App/Controller/Reports.pm +++ b/perllib/FixMyStreet/App/Controller/Reports.pm @@ -31,8 +31,6 @@ Show the summary page of all reports. sub index : Path : Args(0) { my ( $self, $c ) = @_; - $c->response->header('Cache-Control' => 'max-age=3600'); - # Fetch all areas of the types we're interested in my $areas_info; eval { @@ -73,6 +71,9 @@ sub index : Path : Args(0) { sprintf(_('The error was: %s'), $@); $c->stash->{template} = 'errors/generic.html'; } + + # Down here so that error pages aren't cached. + $c->response->header('Cache-Control' => 'max-age=3600'); } =head2 index diff --git a/perllib/FixMyStreet/Cobrand.pm b/perllib/FixMyStreet/Cobrand.pm index ad21820d7..647261e32 100644 --- a/perllib/FixMyStreet/Cobrand.pm +++ b/perllib/FixMyStreet/Cobrand.pm @@ -18,31 +18,50 @@ my @ALL_COBRAND_CLASSES = __PACKAGE__->_cobrands; =head2 get_allowed_cobrands -Return an array reference of allowed cobrand subdomains +Return an array reference of allowed cobrand monikers and hostname substrings. =cut sub get_allowed_cobrands { - my $allowed_cobrand_string = FixMyStreet->config('ALLOWED_COBRANDS'); - my @allowed_cobrands = split( /\|/, $allowed_cobrand_string ); + my $class = shift; + my @allowed_cobrands = map { + ref $_ ? { moniker => keys %$_, host => values %$_ } + : { moniker => $_, host => $_ } + } @{ $class->_get_allowed_cobrands }; return \@allowed_cobrands; } +=head2 _get_allowed_cobrands + +Simply returns the config variable (so this function can be overridden in test suite). + +=cut + +sub _get_allowed_cobrands { + return FixMyStreet->config('ALLOWED_COBRANDS'); +} + =head2 available_cobrand_classes @available_cobrand_classes = FixMyStreet::Cobrand->available_cobrand_classes(); -Return an array of all the classes that were found and that have monikers that -match the values from get_allowed_cobrands. +Return an array of all the classes that were found and that have monikers +that match the values from get_allowed_cobrands, in the order of +get_allowed_cobrands. =cut sub available_cobrand_classes { my $class = shift; - my %allowed = map { $_ => 1 } @{ $class->get_allowed_cobrands }; - my @avail = grep { $allowed{ $_->moniker } } @ALL_COBRAND_CLASSES; + my %all = map { $_->moniker => $_ } @ALL_COBRAND_CLASSES; + my @avail; + foreach (@{ $class->get_allowed_cobrands }) { + next unless $all{$_->{moniker}}; + $_->{class} = $all{$_->{moniker}}; + push @avail, $_; + } return @avail; } @@ -60,8 +79,7 @@ sub get_class_for_host { my $host = shift; foreach my $avail ( $class->available_cobrand_classes ) { - my $moniker = $avail->moniker; - return $avail if $host =~ m{$moniker}; + return $avail->{class} if $host =~ /$avail->{host}/; } # if none match then use the default @@ -81,7 +99,7 @@ sub get_class_for_moniker { my $moniker = shift; foreach my $avail ( $class->available_cobrand_classes ) { - return $avail if $moniker eq $avail->moniker; + return $avail->{class} if $moniker eq $avail->{moniker}; } # Special case for old blank cobrand entries in fixmystreet.com. diff --git a/perllib/FixMyStreet/Cobrand/Default.pm b/perllib/FixMyStreet/Cobrand/Default.pm index aeb956680..aacfb5e2b 100644 --- a/perllib/FixMyStreet/Cobrand/Default.pm +++ b/perllib/FixMyStreet/Cobrand/Default.pm @@ -782,28 +782,28 @@ sub council_rss_alert_options { id => sprintf( 'area:%s:%s', $district->{id}, $district->{id_name} ), text => $district_name, rss_text => sprintf( _('RSS feed for %s'), $district_name ), - uri => $c->uri_for( '/rss/areas/' . $district->{short_name} ) + uri => $c->uri_for( '/rss/area/' . $district->{short_name} ) }, { type => 'area', id => sprintf( 'area:%s:%s:%s:%s', $district->{id}, $d_ward->{id}, $district->{id_name}, $d_ward->{id_name} ), text => sprintf( _('%s ward, %s'), $d_ward_name, $district_name ), rss_text => sprintf( _('RSS feed for %s ward, %s'), $d_ward_name, $district_name ), - uri => $c->uri_for( '/rss/areas/' . $district->{short_name} . '/' . $d_ward->{short_name} ) + uri => $c->uri_for( '/rss/area/' . $district->{short_name} . '/' . $d_ward->{short_name} ) }, { type => 'area', id => sprintf( 'area:%s:%s', $county->{id}, $county->{id_name} ), text => $county_name, rss_text => sprintf( _('RSS feed for %s'), $county_name ), - uri => $c->uri_for( '/rss/areas/' . $county->{short_name} ) + uri => $c->uri_for( '/rss/area/' . $county->{short_name} ) }, { type => 'area', id => sprintf( 'area:%s:%s:%s:%s', $county->{id}, $c_ward->{id}, $county->{id_name}, $c_ward->{id_name} ), text => sprintf( _('%s ward, %s'), $c_ward_name, $county_name ), rss_text => sprintf( _('RSS feed for %s ward, %s'), $c_ward_name, $county_name ), - uri => $c->uri_for( '/rss/areas/' . $county->{short_name} . '/' . $c_ward->{short_name} ) + uri => $c->uri_for( '/rss/area/' . $county->{short_name} . '/' . $c_ward->{short_name} ) }; push @reported_to_options, diff --git a/perllib/FixMyStreet/Cobrand/UKCouncils.pm b/perllib/FixMyStreet/Cobrand/UKCouncils.pm index 570c90c46..b40f13d9d 100644 --- a/perllib/FixMyStreet/Cobrand/UKCouncils.pm +++ b/perllib/FixMyStreet/Cobrand/UKCouncils.pm @@ -12,6 +12,10 @@ sub site_restriction { return ( "and council='" . $self->council_id . "'", $self->council_url, { council => sprintf('%d', $self->council_id) } ); } +sub restriction { + return { cobrand => shift->moniker }; +} + sub problems_clause { my $self = shift; return { council => sprintf('%d', $self->council_id) }; @@ -3,8 +3,6 @@ use strict; use warnings; -use List::MoreUtils 'uniq'; - my $root; BEGIN { # add the local perllibs too @@ -17,11 +15,10 @@ BEGIN { # add the local perllibs too # Set the environment for the FixMyStreet project # Add the lib/perl5 in perl-external so that we can load local::lib from there -use lib "$root/perl-external/lib/perl5"; +use lib "$root/local/lib/perl5"; # Add the perl-external dirs properly using local::lib -use local::lib "$root/perl-external"; -use local::lib "$root/perl-external/local-lib"; +use local::lib "$root/local"; use lib "$root/commonlib/perllib"; use lib "$root/perllib"; @@ -29,6 +26,10 @@ for ( "$root/commonlib/perllib", "$root/perllib" ) { $ENV{PERL5LIB} = "$_:$ENV{PERL5LIB}"; } +# need to make sure we fetch this after our libs are in INC as some +# vendor provided versions are old an incompatible with Moose +use List::MoreUtils 'uniq'; + # also set the path to our scripts etc $ENV{PATH} = join ':', uniq "$root/bin", split( m/:/, $ENV{PATH} ); diff --git a/t/cobrand/loading.t b/t/cobrand/loading.t index 405ef4761..bd83da07f 100644 --- a/t/cobrand/loading.t +++ b/t/cobrand/loading.t @@ -14,16 +14,14 @@ use_ok 'FixMyStreet::Cobrand'; ok $allowed, "got the allowed_cobrands"; isa_ok $allowed, "ARRAY"; cmp_ok scalar @$allowed, '>', 1, "got more than one"; - is join( '|', @$allowed ), FixMyStreet->config('ALLOWED_COBRANDS'), - "matches config value"; } # fake the allowed cobrands for testing my $override = Sub::Override->new( # - 'FixMyStreet::Cobrand::get_allowed_cobrands' => + 'FixMyStreet::Cobrand::_get_allowed_cobrands' => sub { return ['emptyhomes'] } ); -is_deeply FixMyStreet::Cobrand->get_allowed_cobrands, ['emptyhomes'], +is_deeply FixMyStreet::Cobrand->get_allowed_cobrands, [ { moniker => 'emptyhomes', host => 'emptyhomes' } ], 'overidden get_allowed_cobrands'; sub run_host_tests { @@ -45,7 +43,7 @@ run_host_tests( # now enable barnet too and check that it works $override->replace( # - 'FixMyStreet::Cobrand::get_allowed_cobrands' => + 'FixMyStreet::Cobrand::_get_allowed_cobrands' => sub { return [ 'emptyhomes', 'barnet' ] } ); diff --git a/templates/web/default/admin/council_contacts.html b/templates/web/default/admin/council_contacts.html index 75d915a29..acfec3ed4 100644 --- a/templates/web/default/admin/council_contacts.html +++ b/templates/web/default/admin/council_contacts.html @@ -1,8 +1,10 @@ [% INCLUDE 'admin/header.html' title=tprintf(loc('Council contacts for %s'), council_name) -%] +[% IF updated %] <p> <em>[% updated %]</em> </p> +[% END %] <p> [% IF example_pc %] @@ -16,7 +18,10 @@ <h2> Council contacts configured via Open311 </h2> +[% END %] +[% IF c.cobrand.moniker == 'fixmystreet' %] +<p class="error">Do not give these out except to people at the council.</p> [% END %] <form method="post" action="[% c.uri_for('council_contacts', area_id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8"> diff --git a/web/js/fixmystreet.js b/web/js/fixmystreet.js index b1a8f1889..834aa4ed3 100644 --- a/web/js/fixmystreet.js +++ b/web/js/fixmystreet.js @@ -8,7 +8,7 @@ function form_category_onchange() { var args = { category: cat.val() }; - + if ( typeof fixmystreet !== 'undefined' ) { args.latitude = fixmystreet.latitude; args.longitude = fixmystreet.longitude; @@ -159,8 +159,9 @@ $(function(){ timer = window.setTimeout(email_alert_close, 2000); }); - - $('#form_category').change( form_category_onchange ); + // Using delegate here because we *might* be running under a cobrand which isn't jQuery 1.7+ + // Delegation is necessary because #form_category may be replaced during the lifetime of the page + $("#problem_form").delegate("select#form_category", "change", form_category_onchange ); // Geolocation if (geo_position_js.init()) { diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js index a7b7d6a14..89c862847 100644 --- a/web/js/map-OpenLayers.js +++ b/web/js/map-OpenLayers.js @@ -432,11 +432,6 @@ OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { }, function(data) { $('#councils_text').html(data.councils_text); $('#form_category_row').html(data.category); - /* Need to reset this here as it gets removed when we replace - the HTML for the dropdown */ - if ( data.has_open311 > 0 ) { - $('#form_category').change( form_category_onchange ); - } }); $('#side-form, #site-logo').show(); diff --git a/web/js/southampton.js b/web/js/southampton.js index 1f3e16105..c0fa48b06 100644 --- a/web/js/southampton.js +++ b/web/js/southampton.js @@ -15,13 +15,16 @@ $(function(){ } }).blur(function(){ var input = $(this); - if (input.val() == '' || input.val() == input.attr('placeholder')) { + if (input.val() === '' || input.val() == input.attr('placeholder')) { input.css({ 'color': '#999999' }); input.val(input.attr('placeholder')); } }).blur(); - - $('#form_category').change(function(){ + + // use on() here because the #form_category may be replaced + // during the page's lifetime + $("#problem_form").on("change.southampton", "select#form_category", + function() { var category = $(this).val(); if ('Potholes' == category) { if (!$('#potholes_extra').length) { @@ -39,12 +42,13 @@ $(function(){ '<option>Deeper than a tennis ball' + '</select></div></div>'; $('#form_title').closest('div.form-field').after(qns); - } + } $('#potholes_extra').show('fast'); } else { $('#potholes_extra').hide('fast'); - } - }).change(); + } + } + ).change(); // change called to trigger (in case we've come in with potholes selected) }); |