summaryrefslogtreecommitdiff
path: root/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm
diff options
context:
space:
mode:
Diffstat (limited to 'cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm')
-rw-r--r--cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm19
1 files changed, 17 insertions, 2 deletions
diff --git a/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm b/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm
index 311a93dfff..2ea3456426 100644
--- a/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm
+++ b/cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm
@@ -3,7 +3,7 @@ use strict;
use warnings;
package CPAN::Meta::Converter;
BEGIN {
- $CPAN::Meta::Converter::VERSION = '2.110930';
+ $CPAN::Meta::Converter::VERSION = eval '2.110930_001';
}
# ABSTRACT: Convert CPAN distribution metadata structures
@@ -11,15 +11,30 @@ BEGIN {
use CPAN::Meta::Validator;
use version 0.82 ();
use Parse::CPAN::Meta 1.4400 ();
+use Carp qw(croak);
sub _dclone {
my $ref = shift;
+
+ # Work around JSON::PP's lack of a convert_blessed_universally
+ local *UNIVERSAL::TO_JSON = sub {
+ my $obj = shift;
+
+ # Special case: stringify version objects
+ # Everything else: serialize
+ return $obj->isa("version") ? "$obj" :
+ $obj->isa("HASH") ? { %$obj } :
+ $obj->isa("ARRAY") ? { @$obj } :
+ croak "Don't know how to serialize $obj";
+ };
+
my $backend = Parse::CPAN::Meta->json_backend();
return $backend->new->decode(
- $backend->new->convert_blessed->encode($ref)
+ $backend->new->convert_blessed->allow_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',