In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/b062fa15a4882eab58623e5169794dfd2c6f20cc?hp=b3d7d86513d56fd205d6766e579023fe4c12eeea>

- Log -----------------------------------------------------------------
commit b062fa15a4882eab58623e5169794dfd2c6f20cc
Author: Steve Hay <[email protected]>
Date:   Thu Dec 17 10:55:40 2015 +0000

    Update META.yml following commit 0d99ea0387

M       META.yml

commit deb8398dd2a96d8d6b8d56c014a608e44e831d07
Author: Steve Hay <[email protected]>
Date:   Thu Dec 17 08:49:12 2015 +0000

    Upgrade Term-ANSIColor from 4.03 to 4.04

M       Porting/Maintainers.pl
M       cpan/Term-ANSIColor/lib/Term/ANSIColor.pm

commit 0bd66ca801c5fb84ee6a8feeb8114f0d8248029f
Author: Steve Hay <[email protected]>
Date:   Thu Dec 17 08:46:22 2015 +0000

    Upgrade Socket from 2.020 to 2.021
    
    Blead customizations are now assimilated.

M       Porting/Maintainers.pl
M       cpan/Socket/Makefile.PL
M       cpan/Socket/Socket.pm
M       cpan/Socket/Socket.xs
M       cpan/Socket/t/getaddrinfo.t
M       t/porting/customized.dat

commit 0d99ea038711d105fbda81bfe7231c63c19a132a
Author: Steve Hay <[email protected]>
Date:   Thu Dec 17 08:44:44 2015 +0000

    Upgrade CPAN-Meta-YAML from 0.017-TRIAL to 0.018

M       Porting/Maintainers.pl
M       cpan/CPAN-Meta-YAML/lib/CPAN/Meta/YAML.pm

commit 054d0c998953375b745a9b7c25537c0a01d951b3
Author: Steve Hay <[email protected]>
Date:   Thu Dec 17 08:35:26 2015 +0000

    Upgrade CPAN-Meta-Requirements from 2.133 to 2.140

M       Porting/Maintainers.pl
M       cpan/CPAN-Meta-Requirements/lib/CPAN/Meta/Requirements.pm
M       cpan/CPAN-Meta-Requirements/t/accepts.t
M       cpan/CPAN-Meta-Requirements/t/bad_version_hook.t
M       cpan/CPAN-Meta-Requirements/t/basic.t
M       cpan/CPAN-Meta-Requirements/t/finalize.t
M       cpan/CPAN-Meta-Requirements/t/from-hash.t
M       cpan/CPAN-Meta-Requirements/t/merge.t
M       cpan/CPAN-Meta-Requirements/t/strings.t
-----------------------------------------------------------------------

Summary of changes:
 META.yml                                           |   2 +-
 Porting/Maintainers.pl                             |  12 +-
 .../lib/CPAN/Meta/Requirements.pm                  | 187 +++++++++++++++------
 cpan/CPAN-Meta-Requirements/t/accepts.t            |  22 +--
 cpan/CPAN-Meta-Requirements/t/bad_version_hook.t   |  13 +-
 cpan/CPAN-Meta-Requirements/t/basic.t              |  34 +++-
 cpan/CPAN-Meta-Requirements/t/finalize.t           |   2 +
 cpan/CPAN-Meta-Requirements/t/from-hash.t          |  13 +-
 cpan/CPAN-Meta-Requirements/t/merge.t              |   2 +
 cpan/CPAN-Meta-Requirements/t/strings.t            |   2 +
 cpan/CPAN-Meta-YAML/lib/CPAN/Meta/YAML.pm          |   4 +-
 cpan/Socket/Makefile.PL                            |  30 ++--
 cpan/Socket/Socket.pm                              |  18 +-
 cpan/Socket/Socket.xs                              |  63 ++++++-
 cpan/Socket/t/getaddrinfo.t                        |  30 ++--
 cpan/Term-ANSIColor/lib/Term/ANSIColor.pm          |  24 +--
 t/porting/customized.dat                           |   2 -
 17 files changed, 325 insertions(+), 135 deletions(-)

diff --git a/META.yml b/META.yml
index 2d10e45..f5791aa 100644
--- a/META.yml
+++ b/META.yml
@@ -111,4 +111,4 @@ resources:
   license: http://dev.perl.org/licenses/
   repository: http://perl5.git.perl.org/
 version: '5.023006'
-x_serialization_backend: 'CPAN::Meta::YAML version 0.017'
+x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl
index 76e6be9..eb1b554 100755
--- a/Porting/Maintainers.pl
+++ b/Porting/Maintainers.pl
@@ -303,7 +303,7 @@ use File::Glob qw(:case);
     },
 
     'CPAN::Meta::Requirements' => {
-        'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-Requirements-2.133.tar.gz',
+        'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-Requirements-2.140.tar.gz',
         'FILES'        => q[cpan/CPAN-Meta-Requirements],
         'EXCLUDED'     => [
             qw(t/00-report-prereqs.t),
@@ -314,7 +314,7 @@ use File::Glob qw(:case);
     },
 
     'CPAN::Meta::YAML' => {
-        'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-YAML-0.017-TRIAL.tar.gz',
+        'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-YAML-0.018.tar.gz',
         'FILES'        => q[cpan/CPAN-Meta-YAML],
         'EXCLUDED'     => [
             't/00-report-prereqs.t',
@@ -987,12 +987,8 @@ use File::Glob qw(:case);
     },
 
     'Socket' => {
-        'DISTRIBUTION' => 'PEVANS/Socket-2.020.tar.gz',
+        'DISTRIBUTION' => 'PEVANS/Socket-2.021.tar.gz',
         'FILES'        => q[cpan/Socket],
-
-        # https://rt.cpan.org/Ticket/Display.html?id=106797
-        # https://rt.cpan.org/Ticket/Display.html?id=107058
-        'CUSTOMIZED'   => [ qw[ Socket.pm Socket.xs ] ],
     },
 
     'Storable' => {
@@ -1021,7 +1017,7 @@ use File::Glob qw(:case);
     },
 
     'Term::ANSIColor' => {
-        'DISTRIBUTION' => 'RRA/Term-ANSIColor-4.03.tar.gz',
+        'DISTRIBUTION' => 'RRA/Term-ANSIColor-4.04.tar.gz',
         'FILES'        => q[cpan/Term-ANSIColor],
         'EXCLUDED'     => [
             qr{^examples/},
diff --git a/cpan/CPAN-Meta-Requirements/lib/CPAN/Meta/Requirements.pm 
b/cpan/CPAN-Meta-Requirements/lib/CPAN/Meta/Requirements.pm
index 037ea50..b0e83b0 100644
--- a/cpan/CPAN-Meta-Requirements/lib/CPAN/Meta/Requirements.pm
+++ b/cpan/CPAN-Meta-Requirements/lib/CPAN/Meta/Requirements.pm
@@ -1,9 +1,10 @@
+use 5.006; # keep at v5.6 for CPAN.pm
 use strict;
 use warnings;
 package CPAN::Meta::Requirements;
 # ABSTRACT: a set of version requirements for a CPAN dist
 
-our $VERSION = '2.133';
+our $VERSION = '2.140';
 
 #pod =head1 SYNOPSIS
 #pod
@@ -115,7 +116,7 @@ sub _version_object {
   if (not defined $version or (!ref($version) && $version eq '0')) {
     return $V0;
   }
-  elsif ( ref($version) eq 'version' || _isa_version($version) ) {
+  elsif ( ref($version) eq 'version' || ( ref($version) && 
_isa_version($version) ) ) {
     $vobj = $version;
   }
   else {
@@ -124,8 +125,14 @@ sub _version_object {
       my $magic = _find_magic_vstring( $version );
       $version = $magic if length $magic;
     }
+    # pad to 3 characters if before 5.8.1 and appears to be a v-string
+    if ( $] < 5.008001 && $version !~ /\A[0-9]/ && substr($version,0,1) ne 'v' 
&& length($version) < 3 ) {
+      $version .= "\0" x (3 - length($version));
+    }
     eval {
       local $SIG{__WARN__} = sub { die "Invalid version: $_[0]" };
+      # avoid specific segfault on some older version.pm versions
+      die "Invalid version: $version" if $version eq 'version';
       $vobj = version->new($version);
     };
     if ( my $err = $@ ) {
@@ -218,7 +225,7 @@ BEGIN {
 
       return $self;
     };
-    
+
     no strict 'refs';
     *$to_add = $code;
   }
@@ -237,7 +244,7 @@ sub add_minimum {
       if $self->is_finalized;
 
     $self->{requirements}{ $name } =
-      CPAN::Meta::Requirements::_Range::Range->with_minimum($V0);
+      CPAN::Meta::Requirements::_Range::Range->with_minimum($V0, $name);
   }
   else {
     $version = $self->_version_object( $name, $version );
@@ -251,9 +258,9 @@ sub add_minimum {
 #pod
 #pod   $req->add_requirements( $another_req_object );
 #pod
-#pod This method adds all the requirements in the given 
CPAN::Meta::Requirements object
-#pod to the requirements object on which it was called.  If there are any 
conflicts,
-#pod an exception is thrown.
+#pod This method adds all the requirements in the given 
CPAN::Meta::Requirements
+#pod object to the requirements object on which it was called.  If there are 
any
+#pod conflicts, an exception is thrown.
 #pod
 #pod This method returns the requirements object.
 #pod
@@ -330,7 +337,7 @@ sub clear_requirement {
 #pod the format described in L<CPAN::Meta::Spec> or undef if the given module 
has no
 #pod requirements. This should only be used for informational purposes such as 
error
 #pod messages and should not be interpreted or used for comparison (see
-#pod L</accepts_module> instead.)
+#pod L</accepts_module> instead).
 #pod
 #pod =cut
 
@@ -341,6 +348,25 @@ sub requirements_for_module {
   return $entry->as_string;
 }
 
+#pod =method structured_requirements_for_module
+#pod
+#pod   $req->structured_requirements_for_module( $module );
+#pod
+#pod This returns a data structure containing the version requirements for a 
given
+#pod module or undef if the given module has no requirements.  This should
+#pod not be used for version checks (see L</accepts_module> instead).
+#pod
+#pod Added in version 2.134.
+#pod
+#pod =cut
+
+sub structured_requirements_for_module {
+  my ($self, $module) = @_;
+  my $entry = $self->__entry_for($module);
+  return unless $entry;
+  return $entry->as_struct;
+}
+
 #pod =method required_modules
 #pod
 #pod This method returns a list of all the modules for which requirements have 
been
@@ -378,7 +404,7 @@ sub __modify_entry_for {
     if $fin and not $old;
 
   my $new = ($old || 'CPAN::Meta::Requirements::_Range::Range')
-          ->$method($version);
+          ->$method($version, $name);
 
   Carp::confess("can't modify finalized requirements")
     if $fin and $old->as_string ne $new->as_string;
@@ -589,36 +615,62 @@ sub from_string_hash {
 
   sub as_string { return "== $_[0]{version}" }
 
+  sub as_struct { return [ [ '==', "$_[0]{version}" ] ] }
+
   sub as_modifiers { return [ [ exact_version => $_[0]{version} ] ] }
 
+  sub _reject_requirements {
+    my ($self, $module, $error) = @_;
+    Carp::confess("illegal requirements for $module: $error")
+  }
+
   sub _clone {
     (ref $_[0])->_new( version->new( $_[0]{version} ) )
   }
 
   sub with_exact_version {
-    my ($self, $version) = @_;
+    my ($self, $version, $module) = @_;
+    $module = 'module' unless defined $module;
 
     return $self->_clone if $self->_accepts($version);
 
-    Carp::confess("illegal requirements: unequal exact version specified");
+    $self->_reject_requirements(
+      $module,
+      "can't be exactly $version when exact requirement is already 
$self->{version}",
+    );
   }
 
   sub with_minimum {
-    my ($self, $minimum) = @_;
+    my ($self, $minimum, $module) = @_;
+    $module = 'module' unless defined $module;
+
     return $self->_clone if $self->{version} >= $minimum;
-    Carp::confess("illegal requirements: minimum above exact specification");
+    $self->_reject_requirements(
+      $module,
+      "minimum $minimum exceeds exact specification $self->{version}",
+    );
   }
 
   sub with_maximum {
-    my ($self, $maximum) = @_;
+    my ($self, $maximum, $module) = @_;
+    $module = 'module' unless defined $module;
+
     return $self->_clone if $self->{version} <= $maximum;
-    Carp::confess("illegal requirements: maximum below exact specification");
+    $self->_reject_requirements(
+      $module,
+      "maximum $maximum below exact specification $self->{version}",
+    );
   }
 
   sub with_exclusion {
-    my ($self, $exclusion) = @_;
+    my ($self, $exclusion, $module) = @_;
+    $module = 'module' unless defined $module;
+
     return $self->_clone unless $exclusion == $self->{version};
-    Carp::confess("illegal requirements: excluded exact specification");
+    $self->_reject_requirements(
+      $module,
+      "tried to exclude $exclusion, which is already exactly specified",
+    );
   }
 }
 
@@ -655,61 +707,87 @@ sub from_string_hash {
     return \@mods;
   }
 
-  sub as_string {
+  sub as_struct {
     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 (
+    for my $tuple (
       [ qw( >= > minimum ) ],
       [ qw( <= < maximum ) ],
     ) {
-      my ($op, $e_op, $k) = @$pair;
+      my ($op, $e_op, $k) = @$tuple;
       if (exists $self->{$k}) {
         my @new_exclusions = grep { $_ != $self->{ $k } } @exclusions;
         if (@new_exclusions == @exclusions) {
-          push @parts, "$op $self->{ $k }";
+          push @parts, [ $op, "$self->{ $k }" ];
         } else {
-          push @parts, "$e_op $self->{ $k }";
+          push @parts, [ $e_op, "$self->{ $k }" ];
           @exclusions = @new_exclusions;
         }
       }
     }
 
-    push @parts, map {; "!= $_" } @exclusions;
+    push @parts, map {; [ "!=", "$_" ] } @exclusions;
+
+    return \@parts;
+  }
+
+  sub as_string {
+    my ($self) = @_;
+
+    my @parts = @{ $self->as_struct };
+
+    return $parts[0][1] if @parts == 1 and $parts[0][0] eq '>=';
 
-    return join q{, }, @parts;
+    return join q{, }, map {; join q{ }, @$_ } @parts;
+  }
+
+  sub _reject_requirements {
+    my ($self, $module, $error) = @_;
+    Carp::confess("illegal requirements for $module: $error")
   }
 
   sub with_exact_version {
-    my ($self, $version) = @_;
+    my ($self, $version, $module) = @_;
+    $module = 'module' unless defined $module;
     $self = $self->_clone;
 
-    Carp::confess("illegal requirements: exact specification outside of range")
-      unless $self->_accepts($version);
+    unless ($self->_accepts($version)) {
+      $self->_reject_requirements(
+        $module,
+        "exact specification $version outside of range " . $self->as_string
+      );
+    }
 
     return CPAN::Meta::Requirements::_Range::Exact->_new($version);
   }
 
   sub _simplify {
-    my ($self) = @_;
+    my ($self, $module) = @_;
 
     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} || [] };
+        if (grep { $_ == $self->{minimum} } @{ $self->{exclusions} || [] }) {
+          $self->_reject_requirements(
+            $module,
+            "minimum and maximum are both $self->{minimum}, which is excluded",
+          );
+        }
 
         return CPAN::Meta::Requirements::_Range::Exact->_new($self->{minimum})
       }
 
-      Carp::confess("illegal requirements: minimum exceeds maximum")
-        if $self->{minimum} > $self->{maximum};
+      if ($self->{minimum} > $self->{maximum}) {
+        $self->_reject_requirements(
+          $module,
+          "minimum $self->{minimum} exceeds maximum $self->{maximum}",
+        );
+      }
     }
 
     # eliminate irrelevant exclusions
@@ -728,7 +806,8 @@ sub from_string_hash {
   }
 
   sub with_minimum {
-    my ($self, $minimum) = @_;
+    my ($self, $minimum, $module) = @_;
+    $module = 'module' unless defined $module;
     $self = $self->_clone;
 
     if (defined (my $old_min = $self->{minimum})) {
@@ -737,11 +816,12 @@ sub from_string_hash {
       $self->{minimum} = $minimum;
     }
 
-    return $self->_simplify;
+    return $self->_simplify($module);
   }
 
   sub with_maximum {
-    my ($self, $maximum) = @_;
+    my ($self, $maximum, $module) = @_;
+    $module = 'module' unless defined $module;
     $self = $self->_clone;
 
     if (defined (my $old_max = $self->{maximum})) {
@@ -750,16 +830,17 @@ sub from_string_hash {
       $self->{maximum} = $maximum;
     }
 
-    return $self->_simplify;
+    return $self->_simplify($module);
   }
 
   sub with_exclusion {
-    my ($self, $exclusion) = @_;
+    my ($self, $exclusion, $module) = @_;
+    $module = 'module' unless defined $module;
     $self = $self->_clone;
 
     push @{ $self->{exclusions} ||= [] }, $exclusion;
 
-    return $self->_simplify;
+    return $self->_simplify($module);
   }
 
   sub _accepts {
@@ -789,7 +870,7 @@ CPAN::Meta::Requirements - a set of version requirements 
for a CPAN dist
 
 =head1 VERSION
 
-version 2.133
+version 2.140
 
 =head1 SYNOPSIS
 
@@ -889,9 +970,9 @@ This method returns the requirements object.
 
   $req->add_requirements( $another_req_object );
 
-This method adds all the requirements in the given CPAN::Meta::Requirements 
object
-to the requirements object on which it was called.  If there are any conflicts,
-an exception is thrown.
+This method adds all the requirements in the given CPAN::Meta::Requirements
+object to the requirements object on which it was called.  If there are any
+conflicts, an exception is thrown.
 
 This method returns the requirements object.
 
@@ -926,7 +1007,17 @@ This returns a string containing the version requirements 
for a given module in
 the format described in L<CPAN::Meta::Spec> or undef if the given module has no
 requirements. This should only be used for informational purposes such as error
 messages and should not be interpreted or used for comparison (see
-L</accepts_module> instead.)
+L</accepts_module> instead).
+
+=head2 structured_requirements_for_module
+
+  $req->structured_requirements_for_module( $module );
+
+This returns a data structure containing the version requirements for a given
+module or undef if the given module has no requirements.  This should
+not be used for version checks (see L</accepts_module> instead).
+
+Added in version 2.134.
 
 =head2 required_modules
 
@@ -1043,7 +1134,7 @@ method.
 =head2 Bugs / Feature Requests
 
 Please report any bugs or feature requests through the issue tracker
-at L<https://github.com/dagolden/CPAN-Meta-Requirements/issues>.
+at L<https://github.com/Perl-Toolchain-Gang/CPAN-Meta-Requirements/issues>.
 You will be notified automatically of any progress on your issue.
 
 =head2 Source Code
@@ -1051,9 +1142,9 @@ You will be notified automatically of any progress on 
your issue.
 This is open source software.  The code repository is available for
 public review and contribution under the terms of the license.
 
-L<https://github.com/dagolden/CPAN-Meta-Requirements>
+L<https://github.com/Perl-Toolchain-Gang/CPAN-Meta-Requirements>
 
-  git clone https://github.com/dagolden/CPAN-Meta-Requirements.git
+  git clone https://github.com/Perl-Toolchain-Gang/CPAN-Meta-Requirements.git
 
 =head1 AUTHORS
 
diff --git a/cpan/CPAN-Meta-Requirements/t/accepts.t 
b/cpan/CPAN-Meta-Requirements/t/accepts.t
index 75bc22f..8a694ea 100644
--- a/cpan/CPAN-Meta-Requirements/t/accepts.t
+++ b/cpan/CPAN-Meta-Requirements/t/accepts.t
@@ -8,32 +8,32 @@ use Test::More 0.88;
 {
   my $req = CPAN::Meta::Requirements->new->add_minimum(Foo => 1);
 
-  ok(  $req->accepts_module(Foo => 1));
-  ok(! $req->accepts_module(Foo => 0));
+  ok(  $req->accepts_module(Foo => 1), "need 1, got 1");
+  ok(! $req->accepts_module(Foo => 0), "need 0, got 1");
 }
 
 {
   my $req = CPAN::Meta::Requirements->new->add_minimum(Foo => 0);
 
-  ok(  $req->accepts_module(Foo => 1));
-  ok(  $req->accepts_module(Foo => undef));
-  ok(  $req->accepts_module(Foo => "v0"));
-  ok(  $req->accepts_module(Foo => v1.2.3));
-  ok(  $req->accepts_module(Foo => "v1.2.3"));
+  ok(  $req->accepts_module(Foo => 1), "need 0, got 1");
+  ok(  $req->accepts_module(Foo => undef), "need 0, got undef");
+  ok(  $req->accepts_module(Foo => "v0"), "need 0, got 'v0'");
+  ok(  $req->accepts_module(Foo => v1.2.3), "need 0, got v1.2.3");
+  ok(  $req->accepts_module(Foo => "v1.2.3"), "need 0, got 'v1.2.3'");
 }
 
 {
   my $req = CPAN::Meta::Requirements->new->add_maximum(Foo => 1);
 
-  ok(  $req->accepts_module(Foo => 1));
-  ok(! $req->accepts_module(Foo => 2));
+  ok(  $req->accepts_module(Foo => 1), "need <=1, got 1");
+  ok(! $req->accepts_module(Foo => 2), "need <=1, got 2");
 }
 
 {
   my $req = CPAN::Meta::Requirements->new->add_exclusion(Foo => 1);
 
-  ok(  $req->accepts_module(Foo => 0));
-  ok(! $req->accepts_module(Foo => 1));
+  ok(  $req->accepts_module(Foo => 0), "need !1, got 0");
+  ok(! $req->accepts_module(Foo => 1), "need !1, got 1");
 }
 
 done_testing;
diff --git a/cpan/CPAN-Meta-Requirements/t/bad_version_hook.t 
b/cpan/CPAN-Meta-Requirements/t/bad_version_hook.t
index 5eef7fb..d021466 100644
--- a/cpan/CPAN-Meta-Requirements/t/bad_version_hook.t
+++ b/cpan/CPAN-Meta-Requirements/t/bad_version_hook.t
@@ -9,6 +9,7 @@ use Test::More 0.88;
 my %DATA = (
   'Foo::Bar' => [ 10, 10 ],
   'Foo::Baz' => [ 'invalid_version', 42 ],
+  'Foo::Qux' => [ 'version', 42 ],
 );
 my %input = map { ($_ => $DATA{$_}->[0]) } keys %DATA;
 my %expected = map { ($_ => $DATA{$_}->[1]) } keys %DATA;
@@ -16,6 +17,8 @@ my %expected = map { ($_ => $DATA{$_}->[1]) } keys %DATA;
 sub dies_ok (&@) {
   my ($code, $qr, $comment) = @_;
 
+  no warnings 'redefine';
+  local *Regexp::CARP_TRACE  = sub { "<regexp>" };
   my $lived = eval { $code->(); 1 };
 
   if ($lived) {
@@ -26,14 +29,18 @@ sub dies_ok (&@) {
 }
 
 my $hook_text;
-sub _fixit { my ($v, $m) = @_; $hook_text = $m; return version->new(42) }
+sub _fixit { my ($v, $m) = @_; $hook_text .= $m; return version->new(42) }
 
 {
   my $req = CPAN::Meta::Requirements->new( {bad_version_hook => \&_fixit} );
 
   my ($k, $v);
-  $req->add_minimum($k => $v) while ($k, $v) = each %input;
-  is $hook_text, 'Foo::Baz', 'hook stored module name';
+  while (($k, $v) = each %input) {
+    note "adding minimum requirement: $k => $v";
+    eval { $req->add_minimum($k => $v) };
+    is( $@, '', "adding minimum '$k' for $v" );
+  }
+  like( $hook_text, qr/Foo::Baz/, 'hook stored module name' );
 
   is_deeply(
     $req->as_string_hash,
diff --git a/cpan/CPAN-Meta-Requirements/t/basic.t 
b/cpan/CPAN-Meta-Requirements/t/basic.t
index ba029f4..26b252c 100644
--- a/cpan/CPAN-Meta-Requirements/t/basic.t
+++ b/cpan/CPAN-Meta-Requirements/t/basic.t
@@ -8,6 +8,8 @@ use Test::More 0.88;
 sub dies_ok (&@) {
   my ($code, $qr, $comment) = @_;
 
+  no warnings 'redefine';
+  local *Regexp::CARP_TRACE  = sub { "<regexp>" };
   my $lived = eval { $code->(); 1 };
 
   if ($lived) {
@@ -126,7 +128,7 @@ sub dies_ok (&@) {
   $req->add_exclusion(Foo => 1);
 
   dies_ok { $req->add_maximum(Foo => 1); }
-    qr/excluded all/,
+    qr/both 1, which is excluded/,
     "can't exclude all values" ;
 }
 
@@ -142,13 +144,13 @@ sub dies_ok (&@) {
   my $req = CPAN::Meta::Requirements->new;
   $req->add_minimum(Foo => 1);
   dies_ok { $req->add_maximum(Foo => 0.5); }
-    qr/minimum exceeds maximum/,
+    qr/minimum 1 exceeds maximum/,
     "maximum must exceed (or equal) minimum";
 
   $req = CPAN::Meta::Requirements->new;
   $req->add_maximum(Foo => 0.5);
   dies_ok { $req->add_minimum(Foo => 1); }
-    qr/minimum exceeds maximum/,
+    qr/minimum 1 exceeds maximum/,
     "maximum must exceed (or equal) minimum";
 }
 
@@ -188,6 +190,18 @@ sub dies_ok (&@) {
     },
     'test exclusion-skipping',
   );
+
+  is_deeply(
+    $req->structured_requirements_for_module('Foo'),
+    # remember, it's okay to change the exact results, as long as the meaning
+    # is unchanged -- rjbs, 2012-07-11
+    [
+      [ '>=', '1' ],
+      [ '<=', '3' ],
+      [ '!=', '2' ],
+    ],
+    "structured requirements for Foo",
+  );
 }
 
 sub foo_1 {
@@ -204,21 +218,21 @@ sub foo_1 {
   is_deeply($req->as_string_hash, { Foo => '== 1' }, "exact requirement");
 
   dies_ok { $req->exact_version(Foo => 2); }
-    qr/unequal/,
+    qr/can't be exactly 2.+already/,
     "can't exactly specify differing versions" ;
 
   $req = foo_1;
   $req->add_minimum(Foo => 0); # ignored
   $req->add_maximum(Foo => 2); # ignored
 
-  dies_ok { $req->add_maximum(Foo => 0); } qr/maximum below/, "max < fixed";
+  dies_ok { $req->add_maximum(Foo => 0); } qr/maximum 0 below exact/, "max < 
fixed";
 
   $req = foo_1;
-  dies_ok { $req->add_minimum(Foo => 2); } qr/minimum above/, "min > fixed";
+  dies_ok { $req->add_minimum(Foo => 2); } qr/minimum 2 exceeds exact/, "min > 
fixed";
 
   $req = foo_1;
   $req->add_exclusion(Foo => 8); # ignored
-  dies_ok { $req->add_exclusion(Foo => 1); } qr/excluded exact/, "!= && ==";
+  dies_ok { $req->add_exclusion(Foo => 1); } qr/tried to exclude/, "!= && ==";
 }
 
 {
@@ -226,6 +240,12 @@ sub foo_1 {
 
   is($req->requirements_for_module('Foo'), '== 1', 'requirements_for_module');
 
+  is_deeply(
+    $req->structured_requirements_for_module('Foo'),
+    [ [ '==', '1' ] ],
+    'structured_requirements_for_module'
+  );
+
   # test empty/undef returns
   my @list = $req->requirements_for_module('FooBarBamBaz');
   my $scalar = $req->requirements_for_module('FooBarBamBaz');
diff --git a/cpan/CPAN-Meta-Requirements/t/finalize.t 
b/cpan/CPAN-Meta-Requirements/t/finalize.t
index 58048b5..aa139d3 100644
--- a/cpan/CPAN-Meta-Requirements/t/finalize.t
+++ b/cpan/CPAN-Meta-Requirements/t/finalize.t
@@ -8,6 +8,8 @@ use Test::More 0.88;
 sub dies_ok (&@) {
   my ($code, $qr, $comment) = @_;
 
+  no warnings 'redefine';
+  local *Regexp::CARP_TRACE  = sub { "<regexp>" };
   my $lived = eval { $code->(); 1 };
 
   if ($lived) {
diff --git a/cpan/CPAN-Meta-Requirements/t/from-hash.t 
b/cpan/CPAN-Meta-Requirements/t/from-hash.t
index 73ec214..fa5d398 100644
--- a/cpan/CPAN-Meta-Requirements/t/from-hash.t
+++ b/cpan/CPAN-Meta-Requirements/t/from-hash.t
@@ -8,6 +8,8 @@ use Test::More 0.88;
 sub dies_ok (&@) {
   my ($code, $qr, $comment) = @_;
 
+  no warnings 'redefine';
+  local *Regexp::CARP_TRACE  = sub { "<regexp>" };
   my $lived = eval { $code->(); 1 };
 
   if ($lived) {
@@ -33,7 +35,9 @@ sub dies_ok (&@) {
   );
 }
 
-{
+SKIP: {
+  skip "Can't tell v-strings from strings until 5.8.1", 1
+    unless $] gt '5.008';
   my $string_hash = {
     Left   => 10,
     Shared => '= 2',
@@ -64,7 +68,9 @@ sub dies_ok (&@) {
   );
 }
 
-{
+SKIP: {
+  skip "Can't tell v-strings from strings until 5.8.1", 2
+    unless $] gt '5.008';
   my $string_hash = {
     Left   => 10,
     Shared => v50.44.60,
@@ -74,7 +80,8 @@ sub dies_ok (&@) {
   my $warning;
   local $SIG{__WARN__} = sub { $warning = join("\n",@_) };
 
-  my $req = CPAN::Meta::Requirements->from_string_hash($string_hash);
+  my $req = eval { CPAN::Meta::Requirements->from_string_hash($string_hash); };
+  is( $@, '', "vstring in string hash lives" );
 
   ok(
     $req->accepts_module(Shared => 'v50.44.60'),
diff --git a/cpan/CPAN-Meta-Requirements/t/merge.t 
b/cpan/CPAN-Meta-Requirements/t/merge.t
index a051356..6610c05 100644
--- a/cpan/CPAN-Meta-Requirements/t/merge.t
+++ b/cpan/CPAN-Meta-Requirements/t/merge.t
@@ -8,6 +8,8 @@ use Test::More 0.88;
 sub dies_ok (&@) {
   my ($code, $qr, $comment) = @_;
 
+  no warnings 'redefine';
+  local *Regexp::CARP_TRACE  = sub { "<regexp>" };
   my $lived = eval { $code->(); 1 };
 
   if ($lived) {
diff --git a/cpan/CPAN-Meta-Requirements/t/strings.t 
b/cpan/CPAN-Meta-Requirements/t/strings.t
index 55a28be..da4e4e1 100644
--- a/cpan/CPAN-Meta-Requirements/t/strings.t
+++ b/cpan/CPAN-Meta-Requirements/t/strings.t
@@ -5,6 +5,8 @@ use Test::More 0.88;
 sub dies_ok (&@) {
   my ($code, $qr, $comment) = @_;
 
+  no warnings 'redefine';
+  local *Regexp::CARP_TRACE  = sub { "<regexp>" };
   my $lived = eval { $code->(); 1 };
 
   if ($lived) {
diff --git a/cpan/CPAN-Meta-YAML/lib/CPAN/Meta/YAML.pm 
b/cpan/CPAN-Meta-YAML/lib/CPAN/Meta/YAML.pm
index f0c1900..746abd6 100644
--- a/cpan/CPAN-Meta-YAML/lib/CPAN/Meta/YAML.pm
+++ b/cpan/CPAN-Meta-YAML/lib/CPAN/Meta/YAML.pm
@@ -5,7 +5,7 @@ package CPAN::Meta::YAML; # git description: v1.68-2-gcc5324e
 # XXX-INGY is 5.8.1 too old/broken for utf8?
 # XXX-XDG Lancaster consensus was that it was sufficient until
 # proven otherwise
-$CPAN::Meta::YAML::VERSION = '0.017'; # TRIAL
+$CPAN::Meta::YAML::VERSION = '0.018';
 ; # original $VERSION removed by Doppelgaenger
 
 #####################################################################
@@ -878,7 +878,7 @@ CPAN::Meta::YAML - Read and write a subset of YAML for CPAN 
Meta files
 
 =head1 VERSION
 
-version 0.017
+version 0.018
 
 =head1 SYNOPSIS
 
diff --git a/cpan/Socket/Makefile.PL b/cpan/Socket/Makefile.PL
index 3bad655..44e51a2 100644
--- a/cpan/Socket/Makefile.PL
+++ b/cpan/Socket/Makefile.PL
@@ -14,7 +14,7 @@ sub check_for
 {
     my %args = @_;
     return if $ENV{PERL_CORE};
-    return if defined $Config{$args{confkey}};
+    return if defined $args{confkey} and defined $Config{$args{confkey}};
 
     require ExtUtils::CBuilder;
     $cb ||= ExtUtils::CBuilder->new( quiet => 1 );
@@ -77,12 +77,13 @@ sub check_for_func
 }
 
 my %defines = (
-    # -Dfoo               func()        $Config{key}
-    HAS_GETADDRINFO => [ "getaddrinfo", "d_getaddrinfo" ],
-    HAS_GETNAMEINFO => [ "getnameinfo", "d_getnameinfo" ],
-    HAS_INET_ATON   => [ "inet_aton",   "d_inetaton" ],
-    HAS_INETNTOP    => [ "inet_ntop",   "d_inetntop" ],
-    HAS_INETPTON    => [ "inet_pton",   "d_inetpton" ],
+    # -Dfoo                func()         $Config{key}
+    HAS_GETADDRINFO  => [ "getaddrinfo",  "d_getaddrinfo" ],
+    HAS_GETNAMEINFO  => [ "getnameinfo",  "d_getnameinfo" ],
+    HAS_GAI_STRERROR => [ "gai_strerror" ],
+    HAS_INET_ATON    => [ "inet_aton",    "d_inetaton" ],
+    HAS_INETNTOP     => [ "inet_ntop",    "d_inetntop" ],
+    HAS_INETPTON     => [ "inet_pton",    "d_inetpton" ],
 );
 
 foreach my $define ( sort keys %defines ) {
@@ -189,8 +190,9 @@ my @names = (
        IPV6_MULTICAST_IF IPV6_MULTICAST_LOOP IPV6_UNICAST_HOPS IPV6_V6ONLY
 
        MSG_BCAST MSG_BTAG MSG_CTLFLAGS MSG_CTLIGNORE MSG_DONTWAIT MSG_EOF
-       MSG_EOR MSG_ERRQUEUE MSG_ETAG MSG_FIN MSG_MAXIOVLEN MSG_MCAST
-       MSG_NOSIGNAL MSG_RST MSG_SYN MSG_TRUNC MSG_URG MSG_WAITALL MSG_WIRE
+       MSG_EOR MSG_ERRQUEUE MSG_ETAG MSG_FASTOPEN MSG_FIN MSG_MAXIOVLEN
+       MSG_MCAST MSG_NOSIGNAL MSG_RST MSG_SYN MSG_TRUNC MSG_URG MSG_WAITALL
+       MSG_WIRE
 
        NI_DGRAM NI_IDN NI_IDN_ALLOW_UNASSIGNED NI_IDN_USE_STD3_ASCII_RULES
        NI_NAMEREQD NI_NOFQDN NI_NUMERICHOST NI_NUMERICSERV
@@ -220,11 +222,11 @@ my @names = (
        SO_SECURITY_ENCRYPTION_TRANSPORT SO_SNDBUF SO_SNDLOWAT SO_SNDTIMEO
        SO_STATE SO_TIMESTAMP SO_TYPE SO_USELOOPBACK SO_XOPEN SO_XSE
 
-       TCP_CONGESTION TCP_CONNECTIONTIMEOUT TCP_CORK TCP_DEFER_ACCEPT TCP_INFO
-       TCP_INIT_CWND TCP_KEEPALIVE TCP_KEEPCNT TCP_KEEPIDLE TCP_KEEPINTVL
-       TCP_LINGER2 TCP_MAXRT TCP_MAXSEG TCP_MD5SIG TCP_NODELAY TCP_NOOPT
-       TCP_NOPUSH TCP_QUICKACK TCP_SACK_ENABLE TCP_STDURG TCP_SYNCNT
-       TCP_WINDOW_CLAMP
+       TCP_CONGESTION TCP_CONNECTIONTIMEOUT TCP_CORK TCP_DEFER_ACCEPT
+       TCP_FASTOPEN TCP_INFO TCP_INIT_CWND TCP_KEEPALIVE TCP_KEEPCNT
+       TCP_KEEPIDLE TCP_KEEPINTVL TCP_LINGER2 TCP_MAXRT TCP_MAXSEG
+       TCP_MD5SIG TCP_NODELAY TCP_NOOPT TCP_NOPUSH TCP_QUICKACK
+       TCP_SACK_ENABLE TCP_STDURG TCP_SYNCNT TCP_WINDOW_CLAMP
 
        UIO_MAXIOV
     ),
diff --git a/cpan/Socket/Socket.pm b/cpan/Socket/Socket.pm
index dd89450..591791e 100644
--- a/cpan/Socket/Socket.pm
+++ b/cpan/Socket/Socket.pm
@@ -3,7 +3,7 @@ package Socket;
 use strict;
 { use 5.006001; }
 
-our $VERSION = '2.020_02'; # patched in perl5.git
+our $VERSION = '2.021';
 
 =head1 NAME
 
@@ -384,7 +384,7 @@ Restrict to only generating addresses for this protocol
 The return value will be a list; the first value being an error indication,
 followed by a list of address structures (if no error occurred).
 
-The error value will be a dualvar; comparable to the C<EI_*> error constants,
+The error value will be a dualvar; comparable to the C<EAI_*> error constants,
 or printable as a human-readable error message string. If no error occurred it
 will be zero numerically and an empty string.
 
@@ -452,7 +452,7 @@ constants, or defaults to 0 if unspecified.
 The return value will be a list; the first value being an error condition,
 followed by the hostname and service name.
 
-The error value will be a dualvar; comparable to the C<EI_*> error constants,
+The error value will be a dualvar; comparable to the C<EAI_*> error constants,
 or printable as a human-readable error message string. The host and service
 names will be plain strings.
 
@@ -726,7 +726,7 @@ our @EXPORT = qw(
        IP_RETOPTS
 
        MSG_BCAST MSG_BTAG MSG_CTLFLAGS MSG_CTLIGNORE MSG_CTRUNC MSG_DONTROUTE
-       MSG_DONTWAIT MSG_EOF MSG_EOR MSG_ERRQUEUE MSG_ETAG MSG_FIN
+       MSG_DONTWAIT MSG_EOF MSG_EOR MSG_ERRQUEUE MSG_ETAG MSG_FASTOPEN MSG_FIN
        MSG_MAXIOVLEN MSG_MCAST MSG_NOSIGNAL MSG_OOB MSG_PEEK MSG_PROXY MSG_RST
        MSG_SYN MSG_TRUNC MSG_URG MSG_WAITALL MSG_WIRE
 
@@ -766,11 +766,11 @@ our @EXPORT_OK = qw(
 
        IPTOS_LOWDELAY IPTOS_THROUGHPUT IPTOS_RELIABILITY IPTOS_MINCOST
 
-       TCP_CONGESTION TCP_CONNECTIONTIMEOUT TCP_CORK TCP_DEFER_ACCEPT TCP_INFO
-       TCP_INIT_CWND TCP_KEEPALIVE TCP_KEEPCNT TCP_KEEPIDLE TCP_KEEPINTVL
-       TCP_LINGER2 TCP_MAXRT TCP_MAXSEG TCP_MD5SIG TCP_NODELAY TCP_NOOPT
-       TCP_NOPUSH TCP_QUICKACK TCP_SACK_ENABLE TCP_STDURG TCP_SYNCNT
-       TCP_WINDOW_CLAMP
+       TCP_CONGESTION TCP_CONNECTIONTIMEOUT TCP_CORK TCP_DEFER_ACCEPT
+       TCP_FASTOPEN TCP_INFO TCP_INIT_CWND TCP_KEEPALIVE TCP_KEEPCNT
+       TCP_KEEPIDLE TCP_KEEPINTVL TCP_LINGER2 TCP_MAXRT TCP_MAXSEG
+       TCP_MD5SIG TCP_NODELAY TCP_NOOPT TCP_NOPUSH TCP_QUICKACK
+       TCP_SACK_ENABLE TCP_STDURG TCP_SYNCNT TCP_WINDOW_CLAMP
 
        IN6ADDR_ANY IN6ADDR_LOOPBACK
 
diff --git a/cpan/Socket/Socket.xs b/cpan/Socket/Socket.xs
index 52df483..9761631 100644
--- a/cpan/Socket/Socket.xs
+++ b/cpan/Socket/Socket.xs
@@ -473,6 +473,65 @@ not_here(const char *s)
 
 #include "const-c.inc"
 
+#if defined(HAS_GETADDRINFO) && !defined(HAS_GAI_STRERROR)
+static const char *gai_strerror(int err)
+{
+  switch (err)
+  {
+#ifdef EAI_ADDRFAMILY
+  case EAI_ADDRFAMILY:
+    return "Address family for hostname is not supported.";
+#endif
+#ifdef EAI_AGAIN
+  case EAI_AGAIN:
+    return "The name could not be resolved at this time.";
+#endif
+#ifdef EAI_BADFLAGS
+  case EAI_BADFLAGS:
+    return "The flags parameter has an invalid value.";
+#endif
+#ifdef EAI_FAIL
+  case EAI_FAIL:
+    return "A non-recoverable error occurred while resolving the name.";
+#endif
+#ifdef EAI_FAMILY
+  case EAI_FAMILY:
+    return "The address family was not recognized or length is invalid.";
+#endif
+#ifdef EAI_MEMORY
+  case EAI_MEMORY:
+    return "A memory allocation failure occurred.";
+#endif
+#ifdef EAI_NODATA
+  case EAI_NODATA:
+    return "No address is associated with the hostname.";
+#endif
+#ifdef EAI_NONAME
+  case EAI_NONAME:
+    return "The name does not resolve for the supplied parameters.";
+#endif
+#ifdef EAI_OVERFLOW
+  case EAI_OVERFLOW:
+    return "An argument buffer overflowed.";
+#endif
+#ifdef EAI_SERVICE
+  case EAI_SERVICE:
+    return "The service parameter was not recognized for the specified socket 
type.";
+#endif
+#ifdef EAI_SOCKTYPE
+  case EAI_SOCKTYPE:
+    return "The specified socket type was not recognized.";
+#endif
+#ifdef EAI_SYSTEM
+  case EAI_SYSTEM:
+    return "A system error occurred - see errno.";
+#endif
+  default:
+    return "Unknown error in getaddrinfo().";
+  }
+}
+#endif
+
 #ifdef HAS_GETADDRINFO
 static SV *err_to_SV(pTHX_ int err)
 {
@@ -693,13 +752,13 @@ inet_aton(host)
                ST(0) = sv_2mortal(newSVpvn((char *)&ip_address, 
sizeof(ip_address)));
                XSRETURN(1);
        }
-
+#ifdef HAS_GETHOSTBYNAME
        phe = gethostbyname(host);
        if (phe && phe->h_addrtype == AF_INET && phe->h_length == 4) {
                ST(0) = sv_2mortal(newSVpvn((char *)phe->h_addr, 
phe->h_length));
                XSRETURN(1);
        }
-
+#endif
        XSRETURN_UNDEF;
        }
 
diff --git a/cpan/Socket/t/getaddrinfo.t b/cpan/Socket/t/getaddrinfo.t
index 6f8a324..b33a3e7 100644
--- a/cpan/Socket/t/getaddrinfo.t
+++ b/cpan/Socket/t/getaddrinfo.t
@@ -22,8 +22,8 @@ ok( defined $res[0]->{addr},
     '$res[0] addr is defined' );
 if (length $res[0]->{addr}) {
     is_deeply( [ unpack_sockaddr_in $res[0]->{addr} ],
-              [ 80, inet_aton( "127.0.0.1" ) ],
-              '$res[0] addr is {"127.0.0.1", 80}' );
+               [ 80, inet_aton( "127.0.0.1" ) ],
+               '$res[0] addr is {"127.0.0.1", 80}' );
 } else {
     fail( '$res[0] addr is empty: check $socksizetype' );
 }
@@ -50,8 +50,8 @@ cmp_ok( $err, "==", 0, '$err == 0 for 
host=127.0.0.1/service=undef' );
     cmp_ok( $err, "==", 0, '$err == 0 for host=$1' );
     ok( scalar @res > 0, '@res has results' );
     is( (unpack_sockaddr_in $res[0]->{addr})[1],
-       inet_aton( "127.0.0.1" ),
-       '$res[0] addr is {"127.0.0.1", ??}' );
+        inet_aton( "127.0.0.1" ),
+        '$res[0] addr is {"127.0.0.1", ??}' );
 }
 
 ( $err, @res ) = getaddrinfo( "", "80", { family => AF_INET, socktype => 
SOCK_STREAM, protocol => IPPROTO_TCP } );
@@ -90,13 +90,13 @@ SKIP: {
     # Some OSes return $err == 0 but no results
     ( $err, @res ) = getaddrinfo( $missinghost, "ftp", { socktype => 
SOCK_STREAM } );
     ok( $err != 0 || ( $err == 0 && @res == 0 ),
-       '$err != 0 or @res == 0 for 
host=TbK4jM2M0OS.lm57DWIyu4i/service=ftp/socktype=SOCK_STREAM' );
+        '$err != 0 or @res == 0 for 
host=TbK4jM2M0OS.lm57DWIyu4i/service=ftp/socktype=SOCK_STREAM' );
     if( @res ) {
-       # Diagnostic that might help
-       while( my $r = shift @res ) {
-           diag( "family=$r->{family} socktype=$r->{socktype} 
protocol=$r->{protocol} addr=[" . length( $r->{addr} ) . " bytes]" );
-           diag( "  addr=" . join( ", ", map { sprintf '0x%02x', ord $_ } 
split m//, $r->{addr} ) );
-       }
+        # Diagnostic that might help
+        while( my $r = shift @res ) {
+            diag( "family=$r->{family} socktype=$r->{socktype} 
protocol=$r->{protocol} addr=[" . length( $r->{addr} ) . " bytes]" );
+            diag( "  addr=" . join( ", ", map { sprintf '0x%02x', ord $_ } 
split m//, $r->{addr} ) );
+        }
     }
 }
 
@@ -112,11 +112,11 @@ AI_NUMERICHOST: {
     # for enabled services but that's kind of yuck, too.
     my @port = (80, 7, 22, 25, 88, 123, 110, 389, 443, 445, 873, 2049, 3306);
     foreach my $port ( @port ) {
-       ( $err, @res ) = getaddrinfo( "127.0.0.1", $port, { flags => 
AI_NUMERICHOST, socktype => SOCK_STREAM } );
-       if( $err == 0 ) {
-           ok( $err == 0, "\$err == 0 for 
127.0.0.1/$port/flags=AI_NUMERICHOST" );
-           last AI_NUMERICHOST;
-       }
+        ( $err, @res ) = getaddrinfo( "127.0.0.1", $port, { flags => 
AI_NUMERICHOST, socktype => SOCK_STREAM } );
+        if( $err == 0 ) {
+            ok( $err == 0, "\$err == 0 for 
127.0.0.1/$port/flags=AI_NUMERICHOST" );
+            last AI_NUMERICHOST;
+        }
     }
     fail( "$err for 127.0.0.1/$port[-1]/flags=AI_NUMERICHOST (failed for ports 
@port)" );
 }
diff --git a/cpan/Term-ANSIColor/lib/Term/ANSIColor.pm 
b/cpan/Term-ANSIColor/lib/Term/ANSIColor.pm
index 2101a87..ace4d47 100644
--- a/cpan/Term-ANSIColor/lib/Term/ANSIColor.pm
+++ b/cpan/Term-ANSIColor/lib/Term/ANSIColor.pm
@@ -1,7 +1,7 @@
 # Term::ANSIColor -- Color screen output using ANSI escape sequences.
 #
 # Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2005, 2006, 2008, 2009, 2010,
-#     2011, 2012, 2013, 2014 Russ Allbery <[email protected]>
+#     2011, 2012, 2013, 2014, 2015 Russ Allbery <[email protected]>
 # Copyright 1996 Zenin
 # Copyright 2012 Kurt Starsinic <[email protected]>
 #
@@ -40,7 +40,7 @@ our $AUTOLOAD;
 # against circular module loading (not that we load any modules, but
 # consistency is good).
 BEGIN {
-    $VERSION = '4.03';
+    $VERSION = '4.04';
 
     # All of the basic supported constants, used in %EXPORT_TAGS.
     my @colorlist = qw(
@@ -475,7 +475,7 @@ sub colored {
     # empty segments, and then colorize each of the line sections.
     if (defined($EACHLINE)) {
         my @text = map { ($_ ne $EACHLINE) ? $attr . $_ . "\e[0m" : $_ }
-          grep { length($_) > 0 }
+          grep { length > 0 }
           split(m{ (\Q$EACHLINE\E) }xms, $string);
         return join(q{}, @text);
     } else {
@@ -536,9 +536,9 @@ sub colorstrip {
 # Returns: True if all the attributes are valid, false otherwise.
 sub colorvalid {
     my (@codes) = @_;
-    @codes = map { split(q{ }, lc($_)) } @codes;
+    @codes = map { split(q{ }, lc) } @codes;
     for my $code (@codes) {
-        if (!defined($ATTRIBUTES{$code}) && !defined($ALIASES{$code})) {
+        if (!(defined($ATTRIBUTES{$code}) || defined($ALIASES{$code}))) {
             return;
         }
     }
@@ -635,9 +635,9 @@ particular features and the versions of Perl that included 
them.
 
 =head2 Supported Colors
 
-Terminal emulators that support color divide into two types: ones that
+Terminal emulators that support color divide into three types: ones that
 support only eight colors, ones that support sixteen, and ones that
-support 256.  This module provides the ANSI escape codes all of them.
+support 256.  This module provides the ANSI escape codes for all of them.
 These colors are referred to as ANSI colors 0 through 7 (normal), 8
 through 15 (16-color), and 16 through 255 (256-color).
 
@@ -1190,9 +1190,13 @@ voice solutions.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright 1996 Zenin.  Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2005,
-2006, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Russ Allbery
-<[email protected]>.  Copyright 2012 Kurt Starsinic <[email protected]>.
+Copyright 1996 Zenin
+
+Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2005, 2006, 2008, 2009, 2010,
+2011, 2012, 2013, 2014, 2015 Russ Allbery <[email protected]>
+
+Copyright 2012 Kurt Starsinic <[email protected]>
+
 This program is free software; you may redistribute it and/or modify it
 under the same terms as Perl itself.
 
diff --git a/t/porting/customized.dat b/t/porting/customized.dat
index 60047a5..73470ab 100644
--- a/t/porting/customized.dat
+++ b/t/porting/customized.dat
@@ -14,8 +14,6 @@ Scalar-List-Utils cpan/Scalar-List-Utils/lib/List/Util/XS.pm 
08abbe1a707927cee53
 Scalar-List-Utils cpan/Scalar-List-Utils/lib/Scalar/Util.pm 
7f1e6eb11105623200ef9cdcb881545ccb769ded
 Scalar-List-Utils cpan/Scalar-List-Utils/lib/Sub/Util.pm 
d87811528ae3587f04e2f09894b8c88471754386
 Scalar-List-Utils cpan/Scalar-List-Utils/ListUtil.xs 
ed25abc419771d6f3f12323f1f0a372f043d51b2
-Socket cpan/Socket/Socket.pm bdc42a2bd5cb560ed1120a3e6f408ed7ece14dce
-Socket cpan/Socket/Socket.xs 6102315291684e56e360ff5e0dd237c9394c49b8
 Win32API::File cpan/Win32API-File/buffers.h 
02d230ac9ac7091365128161a0ed671898baefae
 Win32API::File cpan/Win32API-File/cFile.h 
fca7e383e76979c3ac3adf12d11d1bcd2618e489
 Win32API::File cpan/Win32API-File/cFile.pc 
992421eea7782a5957b64f66764f6ffb5093bee4

--
Perl5 Master Repository

Reply via email to