aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore7
-rw-r--r--README.pod81
-rwxr-xr-xbin/cpanm11316
-rwxr-xr-xbin/install_perl_modules23
-rwxr-xr-xbin/make_css4
-rwxr-xr-xbin/send-alerts3
-rwxr-xr-xbin/send-questionnaires3
-rwxr-xr-xbin/send-reports3
-rwxr-xr-xbin/update-all-reports13
-rw-r--r--blog/conf/general-example27
-rw-r--r--blog/conf/httpd.conf18
-rw-r--r--blog/conf/wp-config.php46
-rw-r--r--blog/web/.htaccess11
-rwxr-xr-xblog/web/fcgi/php-basic3
-rw-r--r--blog/web/index.php6
-rw-r--r--carton.lock25378
-rw-r--r--conf/general.yml-example4
-rw-r--r--conf/packages2
-rw-r--r--notes/INSTALL141
-rw-r--r--notes/INSTALL.pod284
-rw-r--r--notes/customisation.pod205
-rw-r--r--notes/glossary.txt7
-rw-r--r--perllib/CrossSell.pm34
-rw-r--r--perllib/FixMyStreet/App/Controller/Photo.pm3
-rw-r--r--perllib/FixMyStreet/App/Controller/Reports.pm5
-rw-r--r--perllib/FixMyStreet/Cobrand.pm38
-rw-r--r--perllib/FixMyStreet/Cobrand/Default.pm8
-rw-r--r--perllib/FixMyStreet/Cobrand/UKCouncils.pm4
-rwxr-xr-xsetenv.pl11
-rw-r--r--t/cobrand/loading.t8
-rw-r--r--templates/web/default/admin/council_contacts.html5
-rw-r--r--web/js/fixmystreet.js7
-rw-r--r--web/js/map-OpenLayers.js5
-rw-r--r--web/js/southampton.js16
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&rsquo;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&rsquo;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) };
diff --git a/setenv.pl b/setenv.pl
index 2916a2c8a..b0cf94a78 100755
--- a/setenv.pl
+++ b/setenv.pl
@@ -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)
});