diff options
36 files changed, 1298 insertions, 335 deletions
diff --git a/.gitignore b/.gitignore index 6a2e2b932e..5decace76b 100644 --- a/.gitignore +++ b/.gitignore @@ -96,6 +96,17 @@ t/perl t/test_state *.output +# t/op/require.t byproducts +t/bleah.pm +t/bleah.do +t/bleah.flg +t/urkkk.pm +t/urkkk.pmc +t/krunch.pm +t/krunch.pmc +t/whap.pm +t/whap.pmc + # make_ext.pl cleanup scripts realclean.sh veryclean.sh @@ -6530,6 +6530,7 @@ if (-d $stem) { chdir($stem); ;@candidates = map { [ $_, pack "sss", split m/[._]/, "$_.0.0" ] } glob("5.*"); + ;@candidates = sort { $a->[1] cmp $b->[1]} @candidates; } else { ;@candidates = (); @@ -905,6 +905,22 @@ Removes -g from optimize, and -DDEBUGGING from ccflags. If you are using a shared libperl, see the warnings about multiple versions of perl under L<Building a shared Perl library>. +Note that a perl built with -DDEBUGGING will be bigger and will run more +slowly than a standard perl. + +=head2 DTrace support + +On platforms where DTrace is available, it may be enabled by +using the -Dusedtrace option to Configure. DTrace probes are available for +subroutine entry (sub-entry) and subroutine exit (sub-exit). Here's a +simple D script that uses them: + + perl$target:::sub-entry, perl$target:::sub-return { + printf("%s %s (%s:%d)\n", probename == "sub-entry" ? "->" : "<-", + copyinstr(arg0), copyinstr(arg1), arg2); + } + + =head2 Extensions Perl ships with a number of standard extensions. These are contained diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 17e4614689..68024b6950 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -477,7 +477,10 @@ package Maintainers; ], 'EXCLUDED' => [ qr{^inc/}, qr{^t/dummy-.*\.hidden$}, - qw{ bin/cpanp-boxed + qw{ bin/cpanp-boxed }, + # SQLite tests would be skipped in core, and + # the filenames are too long for VMS! + qw{ t/031_CPANPLUS-Internals-Source-SQLite.t t/032_CPANPLUS-Internals-Source-via-sqlite.t }, @@ -664,7 +667,7 @@ package Maintainers; 'ExtUtils::Install' => { 'MAINTAINER' => 'yves', - 'DISTRIBUTION' => 'YVES/ExtUtils-Install-1.52.tar.gz', + 'DISTRIBUTION' => 'YVES/ExtUtils-Install-1.52_03.tar.gz', # MakeMaker has a basic.t too, and we use that. 'FILES' => q[lib/ExtUtils/{Install,Installed,Packlist}.pm lib/ExtUtils/Changes_EU-Install @@ -738,7 +741,7 @@ package Maintainers; 'ExtUtils::ParseXS' => { 'MAINTAINER' => 'kwilliams', - 'DISTRIBUTION' => 'DAGOLDEN/ExtUtils-ParseXS-2.20_01.tar.gz', + 'DISTRIBUTION' => 'DAGOLDEN/ExtUtils-ParseXS-2.2002.tar.gz', 'FILES' => q[lib/ExtUtils/ParseXS.pm lib/ExtUtils/ParseXS lib/ExtUtils/xsubpp diff --git a/Porting/corelist.pl b/Porting/corelist.pl index b301c832e0..bb0cf92aec 100644 --- a/Porting/corelist.pl +++ b/Porting/corelist.pl @@ -1,6 +1,13 @@ #!perl # Generates info for Module::CoreList from this perl tree -# run this from the root of a clean perl tree +# run this from the root of a perl tree, using the perl built in that tree. +# +# Data is on STDOUT. +# +# With an optional arg specifying the root of a CPAN mirror, outputs the +# %upstream and %bug_tracker hashes too. + +use 5.010001; # needs Parse::CPAN::Meta use strict; use warnings; @@ -10,11 +17,18 @@ use lib "Porting"; use Maintainers qw(%Modules files_to_modules); use File::Spec; + my %lines; my %module_to_file; my %modlist; + +die "usage: $0 [ cpan-mirror/ ]\n" unless @ARGV <= 1; my $cpan = shift; +if (! -f 'MANIFEST') { + die "Must be run from the root of a clean perl tree\n" +} + if ($cpan) { my $modlistfile = File::Spec->catfile($cpan, 'modules', '02packages.details.txt'); diff --git a/Porting/release_managers_guide.pod b/Porting/release_managers_guide.pod index 5bc1ff24b7..f418197892 100644 --- a/Porting/release_managers_guide.pod +++ b/Porting/release_managers_guide.pod @@ -81,7 +81,7 @@ F<pod/perlhist.pod> with the current date, e.g. 5.8.9-RC1 2008-Nov-10 -Make sure the correct pumpking is listed, and if this your first time, +Make sure the correct pumpking is listed, and if this is your first time, append your name to C<THE KEEPERS OF THE PUMPKIN>. =item * @@ -347,10 +347,62 @@ final release, remove it. [ XXX how now?? see 34813 for old way ] =item * Update C<Module::Corelist>. -[XXX add how: presumably Porting/corelist.pl ] -but we need to fix that: -it has been holding perforce revisions for releases, but we can't know -hashes in advance for git. We need to agree a plan to move to git tags] + +Note that if this is a maint release, you should run the following actions +from the maint directory, but edit the C<Corelist.pm> in I<blead> and +subsequently cherry-pick it. + +First, in order to update the C<%upstream> and C<%bug_tracker> hashes, +the C<Porting/corelist.pl> script requires you to have a local CPAN +mirror. See http://www.cpan.org/misc/cpan-faq.html#How_mirror_CPAN for +more details, but basically: + + $ mkdir ~/cpan-mirror + $ rsync -av --delete ftp.funet.fi::CPAN ~/cpan-mirror/ + +(and re-run the rsync each time you need it to be up-to-date). +[XXX this really needs fixing to not require a whole CPAN mirror] + +If necessary, bump C<$VERSION> (there's no need to do this for +every RC; in RC1, bump the version to a new clean number that will +appear in the final release, and leave as-is for the later RCs and final). + +Then do + + $ cd ~/perl/root; make perl + $ ./perl -Ilib Porting/corelist.pl ~/cpan-mirror/ > /tmp/corelist + +This creates a file that looks something like + + 5.010001 => { + 'AnyDBM_File' => '1.00', + ... + }, + + %upstream = ( + 'App::Prove' => undef, + ... + ); + + %bug_tracker = ( + 'App::Prove' => 'http://rt.cpan.org/...', + ... + ); + +Cut and paste these tables into F<lib/Module/CoreList.pm>: the module +version list should be appended as the last entry in the C<%version> hash +(or replaced, if we've already added it for an earlier release candidate), +while the existing C<%upstream> and C<%bug_tracker> hashes should be +replaced with the new versions. + +Edit the version number in the new C<< 'Module::CoreList' => 'X.YZ' >> +entry, as that is likely to reflect the previous version number. + +Then, add the current perl version to the C<CAVEATS> paragraph. + +Add or update an entry to the C<%released> hash, including today's date +(if this is just a release candidate, set the date to '????-??-??'). + =item * @@ -359,6 +411,10 @@ carry on with the extra steps that follow here. =item * +Disarm the patchlevel.h change [ XXX expand ] + +=item * + Wait for the smoke tests to catch up with the commit which this release is based on (or at least the last commit of any consequence). @@ -369,9 +425,14 @@ back and fix things. =item * Once smoking is okay, upload it to PAUSE. This is the point of no return. +You may wish to create a .bz2 version of the tarball and upload that too. + +=item * -XXX check whether need to upload .bz2,.meta, .readme too? +create a tag [XXX and branches and stuff ????], e.g.: + $ git tag perl-5.10.1-RC1 -m'Release Candidate 1 of Perl 5.10.1' + $ git push origin tag perl-5.10.1-RC1 =item * @@ -380,6 +441,8 @@ Mail p5p to announce it, with a quote you prepared earlier. =item * Wait 24 hours or so, then post the announcement to use.perl.org. +(if you don't have access rights to post news, ask someone like Rafael to +do it for you.) =back @@ -403,16 +466,6 @@ Follow the same steps as for making a release candidate, then Ask Jarkko to update http://www.cpan.org/src/README.html and Rafael to update http://dev.perl.org/perl5/ - -=item * - -create a tag [XXX and branches and stuff?] -[ XXX expand this ] - -=item * - -[ XXX disarm any patchlevel.h stuff ??? ] - =item * Create a new empty perlNNNdelta.pod file for the current release + 1; @@ -449,12 +502,28 @@ on the previous filename to look for suitable candidates. =item * -If this was major release, bump the version, e.g. 5.12.0 to 5.13.0 -[ XXX probably more complex stuff to do, including perldelta, +If this was a major release, then + +=over + +=item * + +bump the version, e.g. 5.12.0 to 5.13.0; + +=item * + +[ XXX probably lots more stuff to do, including perldelta, C<lib/feature.pm> ] =item * +Create a new maint branch with an empty Porting/mergelog file +[ XXX and lots of other stuff too, probably ] + +=back + +=item * + Copy the perlNNNdelta.pod for this release into the other branches, and remember to update these files on those branches too: @@ -476,6 +545,11 @@ e.g. 5.8.9-RC2 2008-Dec-06 5.8.9 2008-Dec-14 +=item * + +Remind the current maintainer of C<Module::CoreList> to push a new release +to CPAN. + =back =head1 SOURCE diff --git a/README.aix b/README.aix index 7b6dbcfba6..68c8503988 100644 --- a/README.aix +++ b/README.aix @@ -32,7 +32,7 @@ like DBD::Oracle, it is better to use the _r version of the compiler. This will not build a threaded Perl, but a thread-enabled Perl. See also L<Threaded Perl> later on. -As of writing (2008-11) only the IBM XL C for AIX or XL C/C++ for AIX +As of writing (2009-07) only the IBM XL C for AIX or XL C/C++ for AIX compiler is supported by IBM on AIX 5L/6.1. The following compiler versions are supported by IBM: @@ -45,8 +45,8 @@ If you choose XL C/C++ V9 you need APAR IZ35785 installed otherwise the integrated SDBM_File do not compile correctly due to an optimization bug. You can circumvent this problem by adding -qipa to the optimization flags (-Doptimize='-O -qipa'). -The PTF for APAR IZ35785 which solves this problem will be available -in 1Q 2009. IBM does provide an emergency fix for this problem. +The PTF for APAR IZ35785 which solves this problem is available +from IBM (April 2009 PTF for XL C/C++ Enterprise Edition for AIX, V9.0). Perl can be compiled with either IBM's ANSI C compiler or with gcc. The former is recommended, as not only it can compile Perl with no @@ -58,23 +58,32 @@ complete, and be sure to read the Perl INSTALL file for more gcc-specific details. Please report any hoops you had to jump through to the development team. -=head2 Perl 5.8.9 was successfully compiled and tested on: - +=head2 Incompatibility with AIX Toolbox lib gdbm + +If the AIX Toolbox version of lib gdbm 1.8.x ist installed on the +system then Perl will not work. This library contains a defect version +of the dbm_store() function. + +=head2 Perl 5.10 was successfully compiled and tested on: + AIX Level | Compiler Level | w th | w/o th --------------------------+-------------------------+------+------- 5.1 TL9 32 bit | XL C/C++ V7 | OK | OK 5.1 TL9 32 bit | gcc 3.2.2 | OK | OK 5.1 TL9 64 bit | XL C/C++ V7 | OK | OK 5.2 TL10 32 bit | XL C/C++ V8 | OK | OK + 5.2 TL8 64 bit | VA C/C++ V6 | OK | OK 5.2 TL10 64 bit | XL C/C++ V8 | OK | OK 5.3 TL7 32 bit | XL C/C++ V9 + IZ35785 | OK | OK 5.3 TL7 32 bit | gcc 4.2.4 | OK | OK 5.3 TL7 64 bit | XL C/C++ V9 + IZ35785 | OK | OK 6.1 TL1 32 bit | XL C/C++ V10 | OK | OK 6.1 TL1 64 bit + IZ39077 | XL C/C++ V10 | OK | OK - + w th = with thread w/o th = without thread + nyt = not yet tested + OK = tested Successfully tested means that all make test runs with an result of 100% OK. All tests were conducted with -Duseshrplib set. @@ -124,7 +133,7 @@ can set: /etc/security/limits default: (or your user) - data = -1 (default is 262144 * 512 byte) + data = -1 (default is 262144 * 512 byte) With the default setting the size is limited to 128MB. The -1 removes this limit. @@ -183,7 +192,7 @@ With the following options you get a Perl version which passes all make tests in 64-bit mode. export OBJECT_MODE=64 / setenv OBJECT_MODE 64 (depending on your shell) - + rm config.sh ./Configure \ -d \ @@ -460,6 +469,6 @@ Rainer Tammer <tammer@tammer.net> =head1 DATE -Version 0.0.8: 01 Dec 2008 +Version 0.0.9: 08 Jul 2009 =cut diff --git a/hints/aix.sh b/hints/aix.sh index 26737fe7be..a7c8df2b64 100644 --- a/hints/aix.sh +++ b/hints/aix.sh @@ -538,4 +538,11 @@ libswanted=`echo " $libswanted " | sed -e 's/ bsd / /'` libswanted=`echo " $libswanted " | sed -e 's/ BSD / /'` d_flock='undef' +# remove libgdbm from wanted libraries +# The libgdbm 1.8.3 from the AIX Toolbox is not working +# (the dbm_store() function is defective) +libswanted=`echo " $libswanted " | sed -e 's/ gdbm / /'` +i_gdbm='undef' +i_gdbmndbm='undef' + # EOF diff --git a/lib/ExtUtils/Changes_EU-Install b/lib/ExtUtils/Changes_EU-Install index 136bac8303..d50a63ede8 100644 --- a/lib/ExtUtils/Changes_EU-Install +++ b/lib/ExtUtils/Changes_EU-Install @@ -1,9 +1,39 @@ Revision history for ExtUtils-Install +1.52_03 + +Missed the t/Installed.t test from core. Bumped version number to allow +a new distro to be released. + +1.52_02 + +Make _chmod verbose message use octal modes, thanks to BDFOY + +Further changes from core, including lastest test file infrastructure +from EUMM. + +Fixed a number of problems in ExtUtils::Installed, for various reasons +this includes a version bump to 1.999_001, which will eventually become +version 2.0. These problems related to finding modules that were installed +with either INSTALL_BASE or PREFIX. Hopefully this resolves these issues. + +1.52_01 (core only release) + +Changes from Core: + +commit 3d55b451d9544fbd4c27c33287b76bee30328830 +Author: John Malmberg +Date: Sun Feb 15 09:25:10 2009 -0600 + + ExtUtils::Install VMS extended character set support + + Preview from https://rt.cpan.org/Ticket/Display.html?id=42149 + + 1.52 -Production rerelease of 1.51 to make the CPAN indexer happy about permissions -(hopefully). +Production rerelease of 1.51 to make the CPAN indexer happy about permissions +(hopefully). SVN Revision 44. diff --git a/lib/ExtUtils/Install.pm b/lib/ExtUtils/Install.pm index c8aa0b3085..5ee9f37685 100644 --- a/lib/ExtUtils/Install.pm +++ b/lib/ExtUtils/Install.pm @@ -42,7 +42,7 @@ ExtUtils::Install - install files from here to there =cut -$VERSION = '1.52_01'; +$VERSION = '1.52_03'; $VERSION = eval $VERSION; =pod @@ -158,10 +158,11 @@ sub _chmod($$;$) { my ( $mode, $item, $verbose )=@_; $verbose ||= 0; if (chmod $mode, $item) { - print "chmod($mode, $item)\n" if $verbose > 1; + printf "chmod(0%o, %s)\n",$mode, $item if $verbose > 1; } else { my $err="$!"; - _warnonce "WARNING: Failed chmod($mode, $item): $err\n" + _warnonce sprintf "WARNING: Failed chmod(0%o, %s): %s\n", + $mode, $item, $err if -e $item; } } diff --git a/lib/ExtUtils/Installed.pm b/lib/ExtUtils/Installed.pm index 8e6513998b..9cb1fc10d7 100644 --- a/lib/ExtUtils/Installed.pm +++ b/lib/ExtUtils/Installed.pm @@ -2,6 +2,7 @@ package ExtUtils::Installed; use 5.00503; use strict; +#use warnings; # XXX requires 5.6 use Carp qw(); use ExtUtils::Packlist; use ExtUtils::MakeMaker; @@ -16,7 +17,7 @@ my $DOSISH = ($^O =~ /^(MSWin\d\d|os2|dos|mint)$/); require VMS::Filespec if $Is_VMS; use vars qw($VERSION); -$VERSION = '1.43'; +$VERSION = '1.999_001'; $VERSION = eval $VERSION; sub _is_prefix { @@ -28,9 +29,8 @@ sub _is_prefix { $path = VMS::Filespec::unixify($path); } - # Sloppy Unix path normalization. - $prefix =~ s{/+}{/}g; - $path =~ s{/+}{/}g; + # Unix path normalization. + $prefix = File::Spec->canonpath($prefix); return 1 if substr($path, 0, length($prefix)) eq $prefix; @@ -58,12 +58,10 @@ sub _is_type { return 1 if $type eq "all"; return($self->_is_doc($path)) if $type eq "doc"; - + my $conf= $self->{':private:'}{Config}; if ($type eq "prog") { - return($self->_is_prefix($path, $self->{':private:'}{Config}{prefix} || $self->{':private:'}{Config}{prefixexp}) - && - !($self->_is_doc($path)) - ? 1 : 0); + return($self->_is_prefix($path, $conf->{prefix} || $conf->{prefixexp}) + && !($self->_is_doc($path)) ? 1 : 0); } return(0); } @@ -78,13 +76,63 @@ sub _is_under { return(0); } +sub _fix_dirs { + my ($self, @dirs)= @_; + # File::Find does not know how to deal with VMS filepaths. + if( $Is_VMS ) { + $_ = VMS::Filespec::unixify($_) + for @dirs; + } + + if ($DOSISH) { + s|\\|/|g for @dirs; + } + return wantarray ? @dirs : $dirs[0]; +} + +sub _make_entry { + my ($self, $module, $packlist_file, $modfile)= @_; + + my $data= { + module => $module, + packlist => scalar(ExtUtils::Packlist->new($packlist_file)), + packlist_file => $packlist_file, + }; + + if (!$modfile) { + $data->{version} = $self->{':private:'}{Config}{version}; + } else { + $data->{modfile} = $modfile; + # Find the top-level module file in @INC + $data->{version} = ''; + foreach my $dir (@{$self->{':private:'}{INC}}) { + my $p = File::Spec->catfile($dir, $modfile); + if (-r $p) { + $module = _module_name($p, $module) if $Is_VMS; + + $data->{version} = MM->parse_version($p); + $data->{version_from} = $p; + $data->{packlist_valid} = exists $data->{packlist}{$p}; + last; + } + } + } + $self->{$module}= $data; +} + +our $INSTALLED; sub new { my ($class) = shift(@_); $class = ref($class) || $class; my %args = @_; - my $self = {}; + return $INSTALLED if $INSTALLED and ($args{default_get} || $args{default}); + + my $self = bless {}, $class; + + $INSTALLED= $self if $args{default_set} || $args{default}; + if ($args{config_override}) { eval { @@ -96,9 +144,9 @@ sub new { else { $self->{':private:'}{Config} = \%Config; } - + for my $tuple ([inc_override => INC => [ @INC ] ], - [ extra_libs => EXTRA => [] ]) + [ extra_libs => EXTRA => [] ]) { my ($arg,$key,$val)=@$tuple; if ( $args{$arg} ) { @@ -114,33 +162,17 @@ sub new { } { my %dupe; - @{$self->{':private:'}{INC}} = grep { -e $_ && !$dupe{$_}++ } - @{$self->{':private:'}{INC}}, @{$self->{':private:'}{EXTRA}}; - } - my $perl5lib = defined $ENV{PERL5LIB} ? $ENV{PERL5LIB} : ""; - - my @dirs = ( $self->{':private:'}{Config}{archlibexp}, - $self->{':private:'}{Config}{sitearchexp}, - split(/\Q$Config{path_sep}\E/, $perl5lib), - @{$self->{':private:'}{EXTRA}}, - ); - - # File::Find does not know how to deal with VMS filepaths. - if( $Is_VMS ) { - $_ = VMS::Filespec::unixify($_) - for @dirs; + @{$self->{':private:'}{LIBDIRS}} = grep { -e $_ && !$dupe{$_}++ } + @{$self->{':private:'}{EXTRA}}, @{$self->{':private:'}{INC}}; } - if ($DOSISH) { - s|\\|/|g for @dirs; - } - my $archlib = $dirs[0]; - + my @dirs= $self->_fix_dirs(@{$self->{':private:'}{LIBDIRS}}); + # Read the core packlist - $self->{Perl}{packlist} = - ExtUtils::Packlist->new( File::Spec->catfile($archlib, '.packlist') ); - $self->{Perl}{version} = $self->{':private:'}{Config}{version}; + my $archlib = $self->_fix_dirs($self->{':private:'}{Config}{archlibexp}); + $self->_make_entry("Perl",File::Spec->catfile($archlib, '.packlist')); + my $root; # Read the module packlists my $sub = sub { # Only process module .packlists @@ -148,41 +180,26 @@ sub new { # Hack of the leading bits of the paths & convert to a module name my $module = $File::Find::name; - my $found; - for (@dirs) { - $found = $module =~ s!\Q$_\E/?auto/(.*)/.packlist!$1!s - and last; - } - unless ($found) { + my $found = $module =~ s!^.*?/auto/(.*)/.packlist!$1!s + or do { # warn "Woah! \$_=$_\n\$module=$module\n\$File::Find::dir=$File::Find::dir\n", # join ("\n",@dirs); return; - } + }; + my $modfile = "$module.pm"; $module =~ s!/!::!g; - # Find the top-level module file in @INC - $self->{$module}{version} = ''; - foreach my $dir (@{$self->{':private:'}{INC}}) { - my $p = File::Spec->catfile($dir, $modfile); - if (-r $p) { - $module = _module_name($p, $module) if $Is_VMS; - - $self->{$module}{version} = MM->parse_version($p); - last; - } - } - - # Read the .packlist - $self->{$module}{packlist} = - ExtUtils::Packlist->new($File::Find::name); + return if $self->{$module}; #shadowing? + $self->_make_entry($module,$File::Find::name,$modfile); }; - my %dupe; - @dirs= grep { -e $_ && !$dupe{$_}++ } @dirs; - $self->{':private:'}{LIBDIRS} = \@dirs; - find($sub, @dirs) if @dirs; + while (@dirs) { + $root= shift @dirs; + next if !-d $root; + find($sub,$root); + } - return(bless($self, $class)); + return $self; } # VMS's non-case preserving file-system means the package name can't @@ -213,10 +230,9 @@ sub _module_name { return $module; } - - sub modules { my ($self) = @_; + $self= $self->new(default=>1) if !ref $self; # Bug/feature of sort in scalar context requires this. return wantarray @@ -226,6 +242,7 @@ sub modules { sub files { my ($self, $module, $type, @under) = @_; + $self= $self->new(default=>1) if !ref $self; # Validate arguments Carp::croak("$module is not installed") if (! exists($self->{$module})); @@ -244,6 +261,7 @@ sub files { sub directories { my ($self, $module, $type, @under) = @_; + $self= $self->new(default=>1) if !ref $self; my (%dirs); foreach my $file ($self->files($module, $type, @under)) { $dirs{dirname($file)}++; @@ -253,6 +271,7 @@ sub directories { sub directory_tree { my ($self, $module, $type, @under) = @_; + $self= $self->new(default=>1) if !ref $self; my (%dirs); foreach my $dir ($self->directories($module, $type, @under)) { $dirs{$dir}++; @@ -269,22 +288,33 @@ sub directory_tree { sub validate { my ($self, $module, $remove) = @_; + $self= $self->new(default=>1) if !ref $self; Carp::croak("$module is not installed") if (! exists($self->{$module})); return($self->{$module}{packlist}->validate($remove)); } sub packlist { my ($self, $module) = @_; + $self= $self->new(default=>1) if !ref $self; Carp::croak("$module is not installed") if (! exists($self->{$module})); return($self->{$module}{packlist}); } sub version { my ($self, $module) = @_; + $self= $self->new(default=>1) if !ref $self; Carp::croak("$module is not installed") if (! exists($self->{$module})); return($self->{$module}{version}); } +sub debug_dump { + my ($self, $module) = @_; + $self= $self->new(default=>1) if !ref $self; + local $self->{":private:"}{Config}; + require Data::Dumper; + print Data::Dumper->new([$self])->Sortkeys(1)->Indent(1)->Dump(); +} + 1; @@ -321,7 +351,13 @@ stores their contents. The .packlists can be queried with the functions described below. Where it searches by default is determined by the settings found in C<%Config::Config>, and what the value is of the PERL5LIB environment variable. -=head1 FUNCTIONS +=head1 METHODS + +Unless specified otherwise all method can be called as class methods, or as object +methods. If called as class methods then the "default" object will be used, and if +necessary created using the current processes %Config and @INC. See the +'default' option to new() for details. + =over 4 @@ -344,19 +380,30 @@ pass that in. Similarly, the parameter C<inc_override> may be a reference to an array which is used in place of the default module search paths -from C<@INC>. +from C<@INC>. use Config; my @dirs = split(/\Q$Config{path_sep}\E/, $ENV{PERL5LIB}); my $p5libs = ExtUtils::Installed->new(inc_override=>\@dirs); -The parameter c<extra_libs> can be used to specify B<additional> paths to -search for installed modules. For instance +B<Note>: You probably do not want to use these options alone, almost always +you will want to set both together. + +The parameter c<extra_libs> can be used to specify B<additional> paths to +search for installed modules. For instance my $installed = ExtUtils::Installed->new(extra_libs=>["/my/lib/path"]); This should only be necessary if C</my/lib/path> is not in PERL5LIB. +Finally there is the 'default', and the related 'default_get' and 'default_set' +options. These options control the "default" object which is provided by the +class interface to the methods. Setting C<default_get> to true tells the constructor +to return the default object if it is defined. Setting C<default_set> to true tells +the constructor to make the default object the constructed object. Setting the +C<default> option is like setting both to true. This is used primarily internally +and probably isn't interesting to any real user. + =item modules() This returns a list of the names of all the installed modules. The perl 'core' diff --git a/lib/ExtUtils/ParseXS.pm b/lib/ExtUtils/ParseXS.pm index 2a91c8fb98..3fa4cc00f5 100644 --- a/lib/ExtUtils/ParseXS.pm +++ b/lib/ExtUtils/ParseXS.pm @@ -18,7 +18,7 @@ my(@XSStack); # Stack of conditionals and INCLUDEs my($XSS_work_idx, $cpp_next_tmp); use vars qw($VERSION); -$VERSION = '2.20_01'; +$VERSION = '2.2002'; use vars qw(%input_expr %output_expr $ProtoUsed @InitFileCode $FH $proto_re $Overload $errors $Fallback $cplusplus $hiertype $WantPrototypes $WantVersionChk $except $WantLineNumbers diff --git a/lib/ExtUtils/ParseXS/Changes b/lib/ExtUtils/ParseXS/Changes index debc228861..b2568d0243 100644 --- a/lib/ExtUtils/ParseXS/Changes +++ b/lib/ExtUtils/ParseXS/Changes @@ -1,5 +1,10 @@ Revision history for Perl extension ExtUtils::ParseXS. +2.2002 - Sat Jul 18 17:22:27 EDT 2009 + + Bug fixes: + - Fix Makefile.PL installdirs for older perls + 2.20_01 - Wed Jul 8 12:12:47 EDT 2009 - Fix XSUsage prototypes for testing [Jan Dubois] diff --git a/lib/ExtUtils/t/Installed.t b/lib/ExtUtils/t/Installed.t index f820ef49c6..dd492c2d1d 100644 --- a/lib/ExtUtils/t/Installed.t +++ b/lib/ExtUtils/t/Installed.t @@ -45,7 +45,7 @@ ok( $ei->_is_type(0, 'all'), '_is_type() should be true for type of "all"' ); foreach my $path (qw( man1dir man3dir )) { SKIP: { - my $dir = $Config{$path.'exp'}; + my $dir = File::Spec->canonpath($Config{$path.'exp'}); skip("no man directory $path on this system", 2 ) unless $dir; my $file = $dir . '/foo'; diff --git a/lib/File/Copy.pm b/lib/File/Copy.pm index be1442f745..83d7a25c67 100644 --- a/lib/File/Copy.pm +++ b/lib/File/Copy.pm @@ -22,7 +22,7 @@ sub syscopy; sub cp; sub mv; -$VERSION = '2.15'; +$VERSION = '2.16'; require Exporter; @ISA = qw(Exporter); @@ -150,7 +150,7 @@ sub copy { my @fs = stat($from); if (@fs) { my @ts = stat($to); - if (@ts && $fs[0] == $ts[0] && $fs[1] == $ts[1]) { + if (@ts && $fs[0] == $ts[0] && $fs[1] == $ts[1] && !-p $from) { carp("'$from' and '$to' are identical (not copied)"); return 0; } diff --git a/lib/File/Copy.t b/lib/File/Copy.t index 7077a38511..abff488099 100644 --- a/lib/File/Copy.t +++ b/lib/File/Copy.t @@ -14,7 +14,7 @@ use Test::More; my $TB = Test::More->builder; -plan tests => 459; +plan tests => 461; # We're going to override rename() later on but Perl has to see an override # at compile time to honor it. @@ -435,6 +435,19 @@ SKIP: { } } +SKIP: { + skip("fork required to test pipe copying", 2) + if (!$Config{'d_fork'}); + + open(my $IN, "-|") || exec $^X, '-e', 'print "Hello, world!\n"'; + open(my $OUT, "|-") || exec $^X, '-ne', 'exit(/Hello/ ? 55 : 0)'; + + ok(copy($IN, $OUT), "copy pipe to another"); + close($OUT); + is($? >> 8, 55, "content copied through the pipes"); + close($IN); +} + END { 1 while unlink "file-$$"; 1 while unlink "lib/file-$$"; diff --git a/lib/Module/CoreList.pm b/lib/Module/CoreList.pm index 08d6154d85..1b211926c2 100644 --- a/lib/Module/CoreList.pm +++ b/lib/Module/CoreList.pm @@ -2,7 +2,7 @@ package Module::CoreList; use strict; use vars qw/$VERSION %released %version %families %upstream %bug_tracker/; -$VERSION = '2.17_02'; +$VERSION = '2.18'; =head1 NAME @@ -54,7 +54,7 @@ perl release instead, use Module::CoreList::first_release_by_date(). Module::CoreList currently covers the 5.000, 5.001, 5.002, 5.003_07, 5.004, 5.004_05, 5.005, 5.005_03, 5.005_04, 5.6.0, 5.6.1, 5.6.2, 5.7.3, 5.8.0, 5.8.1, 5.8.2, 5.8.3, 5.8.4, 5.8.5, 5.8.6, 5.8.7, 5.8.8, 5.8.9, 5.9.0, 5.9.1, 5.9.2, 5.9.3, -5.9.4, 5.9.5 and 5.10.0 releases of perl. +5.9.4, 5.9.5, 5.10.0 and 5.10.1 releases of perl. =head1 HISTORY @@ -170,6 +170,7 @@ sub find_version { 5.009005 => '2007-07-07', 5.010000 => '2007-12-18', 5.008009 => '2008-12-14', + 5.010001 => '????-??-??', ); for my $version ( sort { $a <=> $b } keys %released ) { @@ -9039,6 +9040,621 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'warnings' => '1.05_01', 'warnings::register' => '1.01', }, + 5.010001 => { + 'AnyDBM_File' => '1.00', + 'App::Prove' => '3.17', + 'App::Prove::State' => '3.17', + 'App::Prove::State::Result'=> '3.17', + 'App::Prove::State::Result::Test'=> '3.17', + 'Archive::Extract' => '0.34', + 'Archive::Tar' => '1.52', + 'Archive::Tar::Constant'=> '0.02', + 'Archive::Tar::File' => '0.02', + 'Attribute::Handlers' => '0.85', + 'AutoLoader' => '5.68', + 'AutoSplit' => '1.06', + 'B' => '1.22', + 'B::Concise' => '0.76', + 'B::Debug' => '1.11', + 'B::Deparse' => '0.89', + 'B::Lint' => '1.11', + 'B::Lint::Debug' => undef, + 'B::Showlex' => '1.02', + 'B::Terse' => '1.05', + 'B::Xref' => '1.02', + 'Benchmark' => '1.11', + 'CGI' => '3.43', + 'CGI::Apache' => '1.00', + 'CGI::Carp' => '1.30_01', + 'CGI::Cookie' => '1.29', + 'CGI::Fast' => '1.07', + 'CGI::Pretty' => '1.08', + 'CGI::Push' => '1.04', + 'CGI::Switch' => '1.00', + 'CGI::Util' => '1.5_01', + 'CPAN' => '1.9402', + 'CPAN::Author' => '5.5', + 'CPAN::Bundle' => '5.5', + 'CPAN::CacheMgr' => '5.5', + 'CPAN::Complete' => '5.5', + 'CPAN::Debug' => '5.5', + 'CPAN::DeferredCode' => '5.50', + 'CPAN::Distribution' => '1.93', + 'CPAN::Distroprefs' => '6', + 'CPAN::Distrostatus' => '5.5', + 'CPAN::Exception::RecursiveDependency'=> '5.5', + 'CPAN::Exception::blocked_urllist'=> '1.0', + 'CPAN::Exception::yaml_not_installed'=> '5.5', + 'CPAN::FTP' => '5.5', + 'CPAN::FTP::netrc' => '1.00', + 'CPAN::FirstTime' => '5.53', + 'CPAN::HandleConfig' => '5.5', + 'CPAN::Index' => '1.93', + 'CPAN::InfoObj' => '5.5', + 'CPAN::Kwalify' => '5.50', + 'CPAN::LWP::UserAgent' => '1.00', + 'CPAN::Module' => '5.5', + 'CPAN::Nox' => '5.50', + 'CPAN::Prompt' => '5.5', + 'CPAN::Queue' => '5.5', + 'CPAN::Shell' => '5.5', + 'CPAN::Tarzip' => '5.501', + 'CPAN::URL' => '5.5', + 'CPAN::Version' => '5.5', + 'CPANPLUS' => '0.88', + 'CPANPLUS::Backend' => undef, + 'CPANPLUS::Backend::RV' => undef, + 'CPANPLUS::Config' => undef, + 'CPANPLUS::Configure' => undef, + 'CPANPLUS::Configure::Setup'=> undef, + 'CPANPLUS::Dist' => undef, + 'CPANPLUS::Dist::Autobundle'=> undef, + 'CPANPLUS::Dist::Base' => undef, + 'CPANPLUS::Dist::Build' => '0.36', + 'CPANPLUS::Dist::Build::Constants'=> '0.36', + 'CPANPLUS::Dist::MM' => undef, + 'CPANPLUS::Dist::Sample'=> undef, + 'CPANPLUS::Error' => undef, + 'CPANPLUS::Internals' => '0.88', + 'CPANPLUS::Internals::Constants'=> undef, + 'CPANPLUS::Internals::Constants::Report'=> undef, + 'CPANPLUS::Internals::Extract'=> undef, + 'CPANPLUS::Internals::Fetch'=> undef, + 'CPANPLUS::Internals::Report'=> undef, + 'CPANPLUS::Internals::Search'=> undef, + 'CPANPLUS::Internals::Source'=> undef, + 'CPANPLUS::Internals::Source::Memory'=> undef, + 'CPANPLUS::Internals::Source::SQLite'=> undef, + 'CPANPLUS::Internals::Source::SQLite::Tie'=> undef, + 'CPANPLUS::Internals::Utils'=> undef, + 'CPANPLUS::Internals::Utils::Autoflush'=> undef, + 'CPANPLUS::Module' => undef, + 'CPANPLUS::Module::Author'=> undef, + 'CPANPLUS::Module::Author::Fake'=> undef, + 'CPANPLUS::Module::Checksums'=> undef, + 'CPANPLUS::Module::Fake'=> undef, + 'CPANPLUS::Module::Signature'=> undef, + 'CPANPLUS::Selfupdate' => undef, + 'CPANPLUS::Shell' => undef, + 'CPANPLUS::Shell::Classic'=> '0.0562', + 'CPANPLUS::Shell::Default'=> '0.88', + 'CPANPLUS::Shell::Default::Plugins::CustomSource'=> undef, + 'CPANPLUS::Shell::Default::Plugins::Remote'=> undef, + 'CPANPLUS::Shell::Default::Plugins::Source'=> undef, + 'Carp' => '1.11', + 'Carp::Heavy' => '1.11', + 'Class::ISA' => '0.33', + 'Class::Struct' => '0.63', + 'Compress::Raw::Bzip2' => '2.020', + 'Compress::Raw::Zlib' => '2.020', + 'Compress::Zlib' => '2.020', + 'Config' => undef, + 'Config::Extensions' => '0.01', + 'Cwd' => '3.30', + 'DB' => '1.02', + 'DBM_Filter' => '0.02', + 'DBM_Filter::compress' => '0.02', + 'DBM_Filter::encode' => '0.02', + 'DBM_Filter::int32' => '0.02', + 'DBM_Filter::null' => '0.02', + 'DBM_Filter::utf8' => '0.02', + 'DB_File' => '1.820', + 'DCLsym' => '1.03', + 'Data::Dumper' => '2.124', + 'Devel::DProf' => '20080331.00', + 'Devel::InnerPackage' => '0.3', + 'Devel::PPPort' => '3.19', + 'Devel::Peek' => '1.04', + 'Devel::SelfStubber' => '1.03', + 'Digest' => '1.16', + 'Digest::MD5' => '2.39', + 'Digest::SHA' => '5.47', + 'Digest::base' => '1.16', + 'Digest::file' => '1.16', + 'DirHandle' => '1.03', + 'Dumpvalue' => '1.13', + 'DynaLoader' => '1.10', + 'Encode' => '2.35', + 'Encode::Alias' => '2.12', + 'Encode::Byte' => '2.03', + 'Encode::CJKConstants' => '2.02', + 'Encode::CN' => '2.02', + 'Encode::CN::HZ' => '2.05', + 'Encode::Config' => '2.05', + 'Encode::EBCDIC' => '2.02', + 'Encode::Encoder' => '2.01', + 'Encode::Encoding' => '2.05', + 'Encode::GSM0338' => '2.01', + 'Encode::Guess' => '2.03', + 'Encode::JP' => '2.03', + 'Encode::JP::H2Z' => '2.02', + 'Encode::JP::JIS7' => '2.04', + 'Encode::KR' => '2.02', + 'Encode::KR::2022_KR' => '2.02', + 'Encode::MIME::Header' => '2.11', + 'Encode::MIME::Header::ISO_2022_JP'=> '1.03', + 'Encode::MIME::Name' => '1.01', + 'Encode::Symbol' => '2.02', + 'Encode::TW' => '2.02', + 'Encode::Unicode' => '2.06', + 'Encode::Unicode::UTF7' => '2.04', + 'English' => '1.04', + 'Env' => '1.00', + 'Errno' => '1.11', + 'Exporter' => '5.63', + 'Exporter::Heavy' => '5.63', + 'ExtUtils::CBuilder' => '0.2602', + 'ExtUtils::CBuilder::Base'=> '0.2602', + 'ExtUtils::CBuilder::Platform::Unix'=> '0.2602', + 'ExtUtils::CBuilder::Platform::VMS'=> '0.2602', + 'ExtUtils::CBuilder::Platform::Windows'=> '0.2602', + 'ExtUtils::CBuilder::Platform::aix'=> '0.2602', + 'ExtUtils::CBuilder::Platform::cygwin'=> '0.2602', + 'ExtUtils::CBuilder::Platform::darwin'=> '0.2602', + 'ExtUtils::CBuilder::Platform::dec_osf'=> '0.2602', + 'ExtUtils::CBuilder::Platform::os2'=> '0.2602', + 'ExtUtils::Command' => '1.16', + 'ExtUtils::Command::MM' => '6.55_01', + 'ExtUtils::Constant' => '0.22', + 'ExtUtils::Constant::Base'=> '0.04', + 'ExtUtils::Constant::ProxySubs'=> '0.06', + 'ExtUtils::Constant::Utils'=> '0.02', + 'ExtUtils::Constant::XS'=> '0.03', + 'ExtUtils::Embed' => '1.28', + 'ExtUtils::Install' => '1.52', + 'ExtUtils::Installed' => '1.43', + 'ExtUtils::Liblist' => '6.55_01', + 'ExtUtils::Liblist::Kid'=> '6.5501', + 'ExtUtils::MM' => '6.55_01', + 'ExtUtils::MM_AIX' => '6.55_01', + 'ExtUtils::MM_Any' => '6.55_01', + 'ExtUtils::MM_BeOS' => '6.55_01', + 'ExtUtils::MM_Cygwin' => '6.55_01', + 'ExtUtils::MM_DOS' => '6.5501', + 'ExtUtils::MM_Darwin' => '6.55_01', + 'ExtUtils::MM_MacOS' => '6.5501', + 'ExtUtils::MM_NW5' => '6.55_01', + 'ExtUtils::MM_OS2' => '6.55_01', + 'ExtUtils::MM_QNX' => '6.55_01', + 'ExtUtils::MM_UWIN' => '6.5501', + 'ExtUtils::MM_Unix' => '6.55_01', + 'ExtUtils::MM_VMS' => '6.55_01', + 'ExtUtils::MM_VOS' => '6.55_01', + 'ExtUtils::MM_Win32' => '6.55_01', + 'ExtUtils::MM_Win95' => '6.55_01', + 'ExtUtils::MY' => '6.5501', + 'ExtUtils::MakeMaker' => '6.55_01', + 'ExtUtils::MakeMaker::Config'=> '6.55_01', + 'ExtUtils::Manifest' => '1.56', + 'ExtUtils::Miniperl' => undef, + 'ExtUtils::Mkbootstrap' => '6.55_01', + 'ExtUtils::Mksymlists' => '6.55_01', + 'ExtUtils::Packlist' => '1.43', + 'ExtUtils::ParseXS' => '2.20_01', + 'ExtUtils::XSSymSet' => '1.1', + 'ExtUtils::testlib' => '6.5501', + 'Fatal' => '2.06', + 'Fcntl' => '1.06', + 'File::Basename' => '2.77', + 'File::CheckTree' => '4.4', + 'File::Compare' => '1.1006', + 'File::Copy' => '2.14', + 'File::DosGlob' => '1.01', + 'File::Fetch' => '0.20', + 'File::Find' => '1.14', + 'File::Glob' => '1.06', + 'File::GlobMapper' => '1.000', + 'File::Path' => '2.07_03', + 'File::Spec' => '3.30', + 'File::Spec::Cygwin' => '3.30', + 'File::Spec::Epoc' => '3.30', + 'File::Spec::Functions' => '3.30', + 'File::Spec::Mac' => '3.30', + 'File::Spec::OS2' => '3.30', + 'File::Spec::Unix' => '3.30', + 'File::Spec::VMS' => '3.30', + 'File::Spec::Win32' => '3.30', + 'File::Temp' => '0.22', + 'File::stat' => '1.01', + 'FileCache' => '1.08', + 'FileHandle' => '2.02', + 'Filespec' => '1.12', + 'Filter::Simple' => '0.84', + 'Filter::Util::Call' => '1.08', + 'FindBin' => '1.50', + 'GDBM_File' => '1.09', + 'Getopt::Long' => '2.38', + 'Getopt::Std' => '1.06', + 'Hash::Util' => '0.07', + 'Hash::Util::FieldHash' => '1.04', + 'I18N::Collate' => '1.01', + 'I18N::LangTags' => '0.35', + 'I18N::LangTags::Detect'=> '1.03', + 'I18N::LangTags::List' => '0.35', + 'I18N::Langinfo' => '0.02', + 'IO' => '1.25', + 'IO::Compress::Adapter::Bzip2'=> '2.020', + 'IO::Compress::Adapter::Deflate'=> '2.020', + 'IO::Compress::Adapter::Identity'=> '2.020', + 'IO::Compress::Base' => '2.020', + 'IO::Compress::Base::Common'=> '2.020', + 'IO::Compress::Bzip2' => '2.020', + 'IO::Compress::Deflate' => '2.020', + 'IO::Compress::Gzip' => '2.020', + 'IO::Compress::Gzip::Constants'=> '2.020', + 'IO::Compress::RawDeflate'=> '2.020', + 'IO::Compress::Zip' => '2.020', + 'IO::Compress::Zip::Constants'=> '2.020', + 'IO::Compress::Zlib::Constants'=> '2.020', + 'IO::Compress::Zlib::Extra'=> '2.020', + 'IO::Dir' => '1.07', + 'IO::File' => '1.14', + 'IO::Handle' => '1.28', + 'IO::Pipe' => '1.13', + 'IO::Poll' => '0.07', + 'IO::Seekable' => '1.10', + 'IO::Select' => '1.17', + 'IO::Socket' => '1.31', + 'IO::Socket::INET' => '1.31', + 'IO::Socket::UNIX' => '1.23', + 'IO::Uncompress::Adapter::Bunzip2'=> '2.020', + 'IO::Uncompress::Adapter::Identity'=> '2.020', + 'IO::Uncompress::Adapter::Inflate'=> '2.020', + 'IO::Uncompress::AnyInflate'=> '2.020', + 'IO::Uncompress::AnyUncompress'=> '2.020', + 'IO::Uncompress::Base' => '2.020', + 'IO::Uncompress::Bunzip2'=> '2.020', + 'IO::Uncompress::Gunzip'=> '2.020', + 'IO::Uncompress::Inflate'=> '2.020', + 'IO::Uncompress::RawInflate'=> '2.020', + 'IO::Uncompress::Unzip' => '2.020', + 'IO::Zlib' => '1.09', + 'IPC::Cmd' => '0.46', + 'IPC::Msg' => '2.01', + 'IPC::Open2' => '1.03', + 'IPC::Open3' => '1.04', + 'IPC::Semaphore' => '2.01', + 'IPC::SharedMem' => '2.01', + 'IPC::SysV' => '2.01', + 'List::Util' => '1.21', + 'List::Util::PP' => '1.21', + 'List::Util::XS' => '1.21', + 'Locale::Constants' => '2.07', + 'Locale::Country' => '2.07', + 'Locale::Currency' => '2.07', + 'Locale::Language' => '2.07', + 'Locale::Maketext' => '1.13', + 'Locale::Maketext::Guts'=> '1.13', + 'Locale::Maketext::GutsLoader'=> '1.13', + 'Locale::Maketext::Simple'=> '0.18', + 'Locale::Script' => '2.07', + 'Log::Message' => '0.02', + 'Log::Message::Config' => '0.01', + 'Log::Message::Handlers'=> undef, + 'Log::Message::Item' => undef, + 'Log::Message::Simple' => '0.04', + 'MIME::Base64' => '3.08', + 'MIME::QuotedPrint' => '3.08', + 'Math::BigFloat' => '1.60', + 'Math::BigFloat::Trace' => '0.01', + 'Math::BigInt' => '1.89', + 'Math::BigInt::Calc' => '0.52', + 'Math::BigInt::CalcEmu' => '0.05', + 'Math::BigInt::FastCalc'=> '0.19', + 'Math::BigInt::Trace' => '0.01', + 'Math::BigRat' => '0.22', + 'Math::Complex' => '1.56', + 'Math::Trig' => '1.2', + 'Memoize' => '1.01_03', + 'Memoize::AnyDBM_File' => '0.65', + 'Memoize::Expire' => '1.00', + 'Memoize::ExpireFile' => '1.01', + 'Memoize::ExpireTest' => '0.65', + 'Memoize::NDBM_File' => '0.65', + 'Memoize::SDBM_File' => '0.65', + 'Memoize::Storable' => '0.65', + 'Module::Build' => '0.34', + 'Module::Build::Base' => '0.34', + 'Module::Build::Compat' => '0.34', + 'Module::Build::Config' => '0.34', + 'Module::Build::ConfigData'=> undef, + 'Module::Build::Cookbook'=> '0.34', + 'Module::Build::Dumper' => '0.34', + 'Module::Build::ModuleInfo'=> '0.34', + 'Module::Build::Notes' => '0.34', + 'Module::Build::PPMMaker'=> '0.34', + 'Module::Build::Platform::Amiga'=> '0.34', + 'Module::Build::Platform::Default'=> '0.34', + 'Module::Build::Platform::EBCDIC'=> '0.34', + 'Module::Build::Platform::MPEiX'=> '0.34', + 'Module::Build::Platform::MacOS'=> '0.34', + 'Module::Build::Platform::RiscOS'=> '0.34', + 'Module::Build::Platform::Unix'=> '0.34', + 'Module::Build::Platform::VMS'=> '0.34', + 'Module::Build::Platform::VOS'=> '0.34', + 'Module::Build::Platform::Windows'=> '0.34', + 'Module::Build::Platform::aix'=> '0.34', + 'Module::Build::Platform::cygwin'=> '0.34', + 'Module::Build::Platform::darwin'=> '0.34', + 'Module::Build::Platform::os2'=> '0.34', + 'Module::Build::PodParser'=> '0.34', + 'Module::Build::Version'=> '0.77', + 'Module::Build::YAML' => '0.50', + 'Module::CoreList' => '2.18', + 'Module::Load' => '0.16', + 'Module::Load::Conditional'=> '0.30', + 'Module::Loaded' => '0.02', + 'Module::Pluggable' => '3.9', + 'Module::Pluggable::Object'=> '3.9', + 'Moped::Msg' => '0.01', + 'NDBM_File' => '1.08', + 'NEXT' => '0.64', + 'Net::Cmd' => '2.29', + 'Net::Config' => '1.11', + 'Net::Domain' => '2.20', + 'Net::FTP' => '2.77', + 'Net::FTP::A' => '1.18', + 'Net::FTP::E' => '0.01', + 'Net::FTP::I' => '1.12', + 'Net::FTP::L' => '0.01', + 'Net::FTP::dataconn' => '0.11', + 'Net::NNTP' => '2.24', + 'Net::Netrc' => '2.12', + 'Net::POP3' => '2.29', + 'Net::Ping' => '2.36', + 'Net::SMTP' => '2.31', + 'Net::Time' => '2.10', + 'Net::hostent' => '1.01', + 'Net::netent' => '1.00', + 'Net::protoent' => '1.00', + 'Net::servent' => '1.01', + 'O' => '1.01', + 'ODBM_File' => '1.07', + 'Object::Accessor' => '0.34', + 'Opcode' => '1.11', + 'POSIX' => '1.17', + 'Package::Constants' => '0.02', + 'Params::Check' => '0.26', + 'Parse::CPAN::Meta' => '1.39', + 'PerlIO' => '1.06', + 'PerlIO::encoding' => '0.11', + 'PerlIO::scalar' => '0.07', + 'PerlIO::via' => '0.07', + 'PerlIO::via::QuotedPrint'=> '0.06', + 'Pod::Checker' => '1.45', + 'Pod::Escapes' => '1.04', + 'Pod::Find' => '1.35', + 'Pod::Functions' => '1.03', + 'Pod::Html' => '1.09', + 'Pod::InputObjects' => '1.31', + 'Pod::LaTeX' => '0.58', + 'Pod::Man' => '2.22', + 'Pod::ParseLink' => '1.09', + 'Pod::ParseUtils' => '1.36', + 'Pod::Parser' => '1.37', + 'Pod::Perldoc' => '3.14_04', + 'Pod::Perldoc::BaseTo' => undef, + 'Pod::Perldoc::GetOptsOO'=> undef, + 'Pod::Perldoc::ToChecker'=> undef, + 'Pod::Perldoc::ToMan' => undef, + 'Pod::Perldoc::ToNroff' => undef, + 'Pod::Perldoc::ToPod' => undef, + 'Pod::Perldoc::ToRtf' => undef, + 'Pod::Perldoc::ToText' => undef, + 'Pod::Perldoc::ToTk' => undef, + 'Pod::Perldoc::ToXml' => undef, + 'Pod::PlainText' => '2.04', + 'Pod::Plainer' => '0.01', + 'Pod::Select' => '1.36', + 'Pod::Simple' => '3.07', + 'Pod::Simple::BlackBox' => undef, + 'Pod::Simple::Checker' => '2.02', + 'Pod::Simple::Debug' => undef, + 'Pod::Simple::DumpAsText'=> '2.02', + 'Pod::Simple::DumpAsXML'=> '2.02', + 'Pod::Simple::HTML' => '3.03', + 'Pod::Simple::HTMLBatch'=> '3.02', + 'Pod::Simple::HTMLLegacy'=> '5.01', + 'Pod::Simple::LinkSection'=> undef, + 'Pod::Simple::Methody' => '2.02', + 'Pod::Simple::Progress' => '1.01', + 'Pod::Simple::PullParser'=> '2.02', + 'Pod::Simple::PullParserEndToken'=> undef, + 'Pod::Simple::PullParserStartToken'=> undef, + 'Pod::Simple::PullParserTextToken'=> undef, + 'Pod::Simple::PullParserToken'=> '2.02', + 'Pod::Simple::RTF' => '2.02', + 'Pod::Simple::Search' => '3.04', + 'Pod::Simple::SimpleTree'=> '2.02', + 'Pod::Simple::Text' => '2.02', + 'Pod::Simple::TextContent'=> '2.02', + 'Pod::Simple::TiedOutFH'=> undef, + 'Pod::Simple::Transcode'=> undef, + 'Pod::Simple::TranscodeDumb'=> '2.02', + 'Pod::Simple::TranscodeSmart'=> undef, + 'Pod::Simple::XHTML' => '3.04', + 'Pod::Simple::XMLOutStream'=> '2.02', + 'Pod::Text' => '3.13', + 'Pod::Text::Color' => '2.05', + 'Pod::Text::Overstrike' => '2.03', + 'Pod::Text::Termcap' => '2.05', + 'Pod::Usage' => '1.36', + 'SDBM_File' => '1.06', + 'Safe' => '2.17', + 'Scalar::Util' => '1.21', + 'Scalar::Util::PP' => '1.21', + 'Search::Dict' => '1.02', + 'SelectSaver' => '1.02', + 'SelfLoader' => '1.17', + 'Shell' => '0.72_01', + 'Socket' => '1.82', + 'Stdio' => '2.4', + 'Storable' => '2.20', + 'Switch' => '2.14', + 'Symbol' => '1.07', + 'Sys::Hostname' => '1.11', + 'Sys::Syslog' => '0.27', + 'Sys::Syslog::win32::Win32'=> undef, + 'TAP::Base' => '3.17', + 'TAP::Formatter::Base' => '3.17', + 'TAP::Formatter::Color' => '3.17', + 'TAP::Formatter::Console'=> '3.17', + 'TAP::Formatter::Console::ParallelSession'=> '3.17', + 'TAP::Formatter::Console::Session'=> '3.17', + 'TAP::Formatter::File' => '3.17', + 'TAP::Formatter::File::Session'=> '3.17', + 'TAP::Formatter::Session'=> '3.17', + 'TAP::Harness' => '3.17', + 'TAP::Object' => '3.17', + 'TAP::Parser' => '3.17', + 'TAP::Parser::Aggregator'=> '3.17', + 'TAP::Parser::Grammar' => '3.17', + 'TAP::Parser::Iterator' => '3.17', + 'TAP::Parser::Iterator::Array'=> '3.17', + 'TAP::Parser::Iterator::Process'=> '3.17', + 'TAP::Parser::Iterator::Stream'=> '3.17', + 'TAP::Parser::IteratorFactory'=> '3.17', + 'TAP::Parser::Multiplexer'=> '3.17', + 'TAP::Parser::Result' => '3.17', + 'TAP::Parser::Result::Bailout'=> '3.17', + 'TAP::Parser::Result::Comment'=> '3.17', + 'TAP::Parser::Result::Plan'=> '3.17', + 'TAP::Parser::Result::Pragma'=> '3.17', + 'TAP::Parser::Result::Test'=> '3.17', + 'TAP::Parser::Result::Unknown'=> '3.17', + 'TAP::Parser::Result::Version'=> '3.17', + 'TAP::Parser::Result::YAML'=> '3.17', + 'TAP::Parser::ResultFactory'=> '3.17', + 'TAP::Parser::Scheduler'=> '3.17', + 'TAP::Parser::Scheduler::Job'=> '3.17', + 'TAP::Parser::Scheduler::Spinner'=> '3.17', + 'TAP::Parser::Source' => '3.17', + 'TAP::Parser::Source::Perl'=> '3.17', + 'TAP::Parser::Utils' => '3.17', + 'TAP::Parser::YAMLish::Reader'=> '3.17', + 'TAP::Parser::YAMLish::Writer'=> '3.17', + 'Term::ANSIColor' => '2.00', + 'Term::Cap' => '1.12', + 'Term::Complete' => '1.402', + 'Term::ReadLine' => '1.04', + 'Term::UI' => '0.20', + 'Term::UI::History' => undef, + 'Test' => '1.25_02', + 'Test::Builder' => '0.92', + 'Test::Builder::Module' => '0.92', + 'Test::Builder::Tester' => '1.18', + 'Test::Builder::Tester::Color'=> '1.18', + 'Test::Harness' => '3.17', + 'Test::More' => '0.92', + 'Test::Simple' => '0.92', + 'Text::Abbrev' => '1.01', + 'Text::Balanced' => '2.0.0', + 'Text::ParseWords' => '3.27', + 'Text::Soundex' => '3.03', + 'Text::Tabs' => '2009.0305', + 'Text::Wrap' => '2009.0305', + 'Thread' => '3.02', + 'Thread::Queue' => '2.11', + 'Thread::Semaphore' => '2.09', + 'Tie::Array' => '1.03', + 'Tie::File' => '0.97_02', + 'Tie::Handle' => '4.2', + 'Tie::Hash' => '1.03', + 'Tie::Hash::NamedCapture'=> '0.06', + 'Tie::Memoize' => '1.1', + 'Tie::RefHash' => '1.38', + 'Tie::Scalar' => '1.01', + 'Tie::StdHandle' => '4.2', + 'Tie::SubstrHash' => '1.00', + 'Time::HiRes' => '1.9719', + 'Time::Local' => '1.1901', + 'Time::Piece' => '1.15', + 'Time::Piece::Seconds' => undef, + 'Time::Seconds' => undef, + 'Time::gmtime' => '1.03', + 'Time::localtime' => '1.02', + 'Time::tm' => '1.00', + 'UNIVERSAL' => '1.05', + 'Unicode' => '5.1.0', + 'Unicode::Collate' => '0.52', + 'Unicode::Normalize' => '1.03', + 'Unicode::UCD' => '0.27', + 'User::grent' => '1.01', + 'User::pwent' => '1.00', + 'Win32' => '0.39', + 'Win32API::File' => '0.1101', + 'Win32API::File::ExtUtils::Myconst2perl'=> '1', + 'Win32CORE' => '0.02', + 'XS::APItest' => '0.15', + 'XS::Typemap' => '0.03', + 'XSLoader' => '0.10', + 'attributes' => '0.09', + 'attrs' => '1.03', + 'autodie' => '2.06', + 'autodie::exception' => '2.06', + 'autodie::exception::system'=> '2.06', + 'autodie::hints' => '2.06', + 'autouse' => '1.06', + 'base' => '2.14', + 'bigint' => '0.23', + 'bignum' => '0.23', + 'bigrat' => '0.23', + 'blib' => '1.04', + 'bytes' => '1.03', + 'charnames' => '1.07', + 'constant' => '1.17', + 'diagnostics' => '1.17', + 'encoding' => '2.6_01', + 'encoding::warnings' => '0.11', + 'feature' => '1.13', + 'fields' => '2.14', + 'filetest' => '1.02', + 'if' => '0.05', + 'integer' => '1.00', + 'less' => '0.02', + 'lib' => '0.62', + 'locale' => '1.00', + 'mro' => '1.01', + 'open' => '1.07', + 'ops' => '1.02', + 'overload' => '1.07', + 'overload::numbers' => undef, + 'overloading' => '0.01', + 'parent' => '0.221', + 're' => '0.09', + 'sigtrap' => '1.04', + 'sort' => '2.01', + 'strict' => '1.04', + 'subs' => '1.00', + 'threads' => '1.72', + 'threads::shared' => '1.29', + 'utf8' => '1.07', + 'vars' => '1.01', + 'version' => '0.77', + 'vmsish' => '1.02', + 'warnings' => '1.06', + 'warnings::register' => '1.01', + }, ); %upstream = ( @@ -9053,10 +9669,11 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'Attribute::Handlers' => 'blead', 'AutoLoader' => 'cpan', 'AutoSplit' => 'cpan', - 'B::Concise' => undef, - 'B::Debug' => undef, + 'B::Concise' => 'blead', + 'B::Debug' => 'blead', 'B::Deparse' => undef, 'B::Lint' => undef, + 'B::Lint::Debug' => undef, 'CGI' => undef, 'CGI::Apache' => undef, 'CGI::Carp' => undef, @@ -9102,7 +9719,7 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'CPANPLUS::Configure' => 'cpan', 'CPANPLUS::Configure::Setup'=> 'cpan', 'CPANPLUS::Dist' => 'cpan', - 'CPANPLUS::Dist::Autobundle'=> 'CPAN', + 'CPANPLUS::Dist::Autobundle'=> 'cpan', 'CPANPLUS::Dist::Base' => 'cpan', 'CPANPLUS::Dist::Build' => 'cpan', 'CPANPLUS::Dist::Build::Constants'=> 'cpan', @@ -9110,18 +9727,18 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'CPANPLUS::Dist::Sample'=> 'cpan', 'CPANPLUS::Error' => 'cpan', 'CPANPLUS::Internals' => 'cpan', - 'CPANPLUS::Internals::Constants'=> 'CPAN', - 'CPANPLUS::Internals::Constants::Report'=> 'CPAN', - 'CPANPLUS::Internals::Extract'=> 'CPAN', - 'CPANPLUS::Internals::Fetch'=> 'CPAN', - 'CPANPLUS::Internals::Report'=> 'CPAN', - 'CPANPLUS::Internals::Search'=> 'CPAN', - 'CPANPLUS::Internals::Source'=> 'CPAN', - 'CPANPLUS::Internals::Source::Memory'=> 'CPAN', - 'CPANPLUS::Internals::Source::SQLite'=> 'CPAN', - 'CPANPLUS::Internals::Source::SQLite::Tie'=> 'CPAN', - 'CPANPLUS::Internals::Utils'=> 'CPAN', - 'CPANPLUS::Internals::Utils::Autoflush'=> 'CPAN', + 'CPANPLUS::Internals::Constants'=> 'cpan', + 'CPANPLUS::Internals::Constants::Report'=> 'cpan', + 'CPANPLUS::Internals::Extract'=> 'cpan', + 'CPANPLUS::Internals::Fetch'=> 'cpan', + 'CPANPLUS::Internals::Report'=> 'cpan', + 'CPANPLUS::Internals::Search'=> 'cpan', + 'CPANPLUS::Internals::Source'=> 'cpan', + 'CPANPLUS::Internals::Source::Memory'=> 'cpan', + 'CPANPLUS::Internals::Source::SQLite'=> 'cpan', + 'CPANPLUS::Internals::Source::SQLite::Tie'=> 'cpan', + 'CPANPLUS::Internals::Utils'=> 'cpan', + 'CPANPLUS::Internals::Utils::Autoflush'=> 'cpan', 'CPANPLUS::Module' => 'cpan', 'CPANPLUS::Module::Author'=> 'CPAN', 'CPANPLUS::Module::Author::Fake'=> 'CPAN', @@ -9130,15 +9747,15 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'CPANPLUS::Module::Signature'=> 'CPAN', 'CPANPLUS::Selfupdate' => 'cpan', 'CPANPLUS::Shell' => 'cpan', - 'CPANPLUS::Shell::Classic'=> 'CPAN', - 'CPANPLUS::Shell::Default'=> 'CPAN', - 'CPANPLUS::Shell::Default::Plugins::CustomSource'=> 'CPAN', - 'CPANPLUS::Shell::Default::Plugins::Remote'=> 'CPAN', - 'CPANPLUS::Shell::Default::Plugins::Source'=> 'CPAN', - 'CPANPLUS::inc' => 'cpan', + 'CPANPLUS::Shell::Classic'=> 'cpan', + 'CPANPLUS::Shell::Default'=> 'cpan', + 'CPANPLUS::Shell::Default::Plugins::CustomSource'=> 'cpan', + 'CPANPLUS::Shell::Default::Plugins::Remote'=> 'cpan', + 'CPANPLUS::Shell::Default::Plugins::Source'=> 'cpan', 'Class::ISA' => undef, 'Compress::Raw::Bzip2' => undef, 'Compress::Raw::Zlib' => undef, + 'Compress::Zlib' => undef, 'Cwd' => 'cpan', 'DB_File' => undef, 'DCLsym' => undef, @@ -9175,16 +9792,16 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'Encode::Unicode::UTF7' => undef, 'Exporter' => undef, 'Exporter::Heavy' => undef, - 'ExtUtils::CBuilder' => undef, - 'ExtUtils::CBuilder::Base'=> undef, - 'ExtUtils::CBuilder::Platform::Unix'=> undef, - 'ExtUtils::CBuilder::Platform::VMS'=> undef, - 'ExtUtils::CBuilder::Platform::Windows'=> undef, - 'ExtUtils::CBuilder::Platform::aix'=> undef, - 'ExtUtils::CBuilder::Platform::cygwin'=> undef, - 'ExtUtils::CBuilder::Platform::darwin'=> undef, - 'ExtUtils::CBuilder::Platform::dec_osf'=> undef, - 'ExtUtils::CBuilder::Platform::os2'=> undef, + 'ExtUtils::CBuilder' => 'cpan', + 'ExtUtils::CBuilder::Base'=> 'cpan', + 'ExtUtils::CBuilder::Platform::Unix'=> 'cpan', + 'ExtUtils::CBuilder::Platform::VMS'=> 'cpan', + 'ExtUtils::CBuilder::Platform::Windows'=> 'cpan', + 'ExtUtils::CBuilder::Platform::aix'=> 'cpan', + 'ExtUtils::CBuilder::Platform::cygwin'=> 'cpan', + 'ExtUtils::CBuilder::Platform::darwin'=> 'cpan', + 'ExtUtils::CBuilder::Platform::dec_osf'=> 'cpan', + 'ExtUtils::CBuilder::Platform::os2'=> 'cpan', 'ExtUtils::Command' => undef, 'ExtUtils::Command::MM' => 'first-come', 'ExtUtils::Constant' => undef, @@ -9216,16 +9833,15 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'ExtUtils::MY' => 'first-come', 'ExtUtils::MakeMaker' => 'first-come', 'ExtUtils::MakeMaker::Config'=> 'first-come', - 'ExtUtils::MakeMaker::bytes'=> 'first-come', - 'ExtUtils::MakeMaker::vmsish'=> 'first-come', 'ExtUtils::Manifest' => undef, 'ExtUtils::Mkbootstrap' => 'first-come', 'ExtUtils::Mksymlists' => 'first-come', 'ExtUtils::Packlist' => 'blead', - 'ExtUtils::ParseXS' => undef, + 'ExtUtils::ParseXS' => 'cpan', 'ExtUtils::testlib' => 'first-come', 'Fatal' => 'cpan', 'File::Fetch' => 'cpan', + 'File::GlobMapper' => undef, 'File::Path' => undef, 'File::Spec' => 'cpan', 'File::Spec::Cygwin' => 'cpan', @@ -9242,6 +9858,20 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'Filter::Util::Call' => undef, 'Getopt::Long' => 'cpan', 'IO' => undef, + 'IO::Compress::Adapter::Bzip2'=> undef, + 'IO::Compress::Adapter::Deflate'=> undef, + 'IO::Compress::Adapter::Identity'=> undef, + 'IO::Compress::Base' => undef, + 'IO::Compress::Base::Common'=> undef, + 'IO::Compress::Bzip2' => undef, + 'IO::Compress::Deflate' => undef, + 'IO::Compress::Gzip' => undef, + 'IO::Compress::Gzip::Constants'=> undef, + 'IO::Compress::RawDeflate'=> undef, + 'IO::Compress::Zip' => undef, + 'IO::Compress::Zip::Constants'=> undef, + 'IO::Compress::Zlib::Constants'=> undef, + 'IO::Compress::Zlib::Extra'=> undef, 'IO::Dir' => undef, 'IO::File' => undef, 'IO::Handle' => undef, @@ -9252,6 +9882,17 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'IO::Socket' => undef, 'IO::Socket::INET' => undef, 'IO::Socket::UNIX' => undef, + 'IO::Uncompress::Adapter::Bunzip2'=> undef, + 'IO::Uncompress::Adapter::Identity'=> undef, + 'IO::Uncompress::Adapter::Inflate'=> undef, + 'IO::Uncompress::AnyInflate'=> undef, + 'IO::Uncompress::AnyUncompress'=> undef, + 'IO::Uncompress::Base' => undef, + 'IO::Uncompress::Bunzip2'=> undef, + 'IO::Uncompress::Gunzip'=> undef, + 'IO::Uncompress::Inflate'=> undef, + 'IO::Uncompress::RawInflate'=> undef, + 'IO::Uncompress::Unzip' => undef, 'IO::Zlib' => undef, 'IPC::Cmd' => 'cpan', 'IPC::Msg' => 'cpan', @@ -9259,6 +9900,8 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'IPC::SharedMem' => 'cpan', 'IPC::SysV' => 'cpan', 'List::Util' => undef, + 'List::Util::PP' => undef, + 'List::Util::XS' => undef, 'Locale::Constants' => undef, 'Locale::Country' => undef, 'Locale::Currency' => undef, @@ -9293,33 +9936,33 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'Memoize::NDBM_File' => undef, 'Memoize::SDBM_File' => undef, 'Memoize::Storable' => undef, - 'Module::Build' => undef, - 'Module::Build::Base' => undef, - 'Module::Build::Compat' => undef, - 'Module::Build::Config' => undef, - 'Module::Build::ConfigData'=> undef, - 'Module::Build::Cookbook'=> undef, - 'Module::Build::Dumper' => undef, - 'Module::Build::ModuleInfo'=> undef, - 'Module::Build::Notes' => undef, - 'Module::Build::PPMMaker'=> undef, - 'Module::Build::Platform::Amiga'=> undef, - 'Module::Build::Platform::Default'=> undef, - 'Module::Build::Platform::EBCDIC'=> undef, - 'Module::Build::Platform::MPEiX'=> undef, - 'Module::Build::Platform::MacOS'=> undef, - 'Module::Build::Platform::RiscOS'=> undef, - 'Module::Build::Platform::Unix'=> undef, - 'Module::Build::Platform::VMS'=> undef, - 'Module::Build::Platform::VOS'=> undef, - 'Module::Build::Platform::Windows'=> undef, - 'Module::Build::Platform::aix'=> undef, - 'Module::Build::Platform::cygwin'=> undef, - 'Module::Build::Platform::darwin'=> undef, - 'Module::Build::Platform::os2'=> undef, - 'Module::Build::PodParser'=> undef, - 'Module::Build::Version'=> undef, - 'Module::Build::YAML' => undef, + 'Module::Build' => 'cpan', + 'Module::Build::Base' => 'cpan', + 'Module::Build::Compat' => 'cpan', + 'Module::Build::Config' => 'cpan', + 'Module::Build::ConfigData'=> 'cpan', + 'Module::Build::Cookbook'=> 'cpan', + 'Module::Build::Dumper' => 'cpan', + 'Module::Build::ModuleInfo'=> 'cpan', + 'Module::Build::Notes' => 'cpan', + 'Module::Build::PPMMaker'=> 'cpan', + 'Module::Build::Platform::Amiga'=> 'cpan', + 'Module::Build::Platform::Default'=> 'cpan', + 'Module::Build::Platform::EBCDIC'=> 'cpan', + 'Module::Build::Platform::MPEiX'=> 'cpan', + 'Module::Build::Platform::MacOS'=> 'cpan', + 'Module::Build::Platform::RiscOS'=> 'cpan', + 'Module::Build::Platform::Unix'=> 'cpan', + 'Module::Build::Platform::VMS'=> 'cpan', + 'Module::Build::Platform::VOS'=> 'cpan', + 'Module::Build::Platform::Windows'=> 'cpan', + 'Module::Build::Platform::aix'=> 'cpan', + 'Module::Build::Platform::cygwin'=> 'cpan', + 'Module::Build::Platform::darwin'=> 'cpan', + 'Module::Build::Platform::os2'=> 'cpan', + 'Module::Build::PodParser'=> 'cpan', + 'Module::Build::Version'=> 'cpan', + 'Module::Build::YAML' => 'cpan', 'Module::CoreList' => 'blead', 'Module::Load' => 'cpan', 'Module::Load::Conditional'=> 'cpan', @@ -9405,6 +10048,7 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'Pod::Usage' => undef, 'Safe' => 'blead', 'Scalar::Util' => undef, + 'Scalar::Util::PP' => undef, 'SelfLoader' => 'blead', 'Shell' => undef, 'Stdio' => undef, @@ -9454,7 +10098,7 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'Term::Cap' => undef, 'Term::UI' => 'cpan', 'Term::UI::History' => 'cpan', - 'Test' => undef, + 'Test' => 'cpan', 'Test::Builder' => undef, 'Test::Builder::Module' => undef, 'Test::Builder::Tester' => undef, @@ -9485,6 +10129,7 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'autodie' => 'cpan', 'autodie::exception' => 'cpan', 'autodie::exception::system'=> 'cpan', + 'autodie::hints' => 'cpan', 'base' => 'blead', 'bigint' => undef, 'bignum' => undef, @@ -9494,7 +10139,6 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'encoding::warnings' => undef, 'fields' => 'blead', 'if' => undef, - 'lib' => 'blead', 'parent' => undef, 'threads' => 'blead', 'threads::shared' => 'blead', @@ -9515,8 +10159,10 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'Attribute::Handlers' => undef, 'AutoLoader' => undef, 'AutoSplit' => undef, + 'B::Concise' => undef, 'B::Debug' => undef, 'B::Lint' => undef, + 'B::Lint::Debug' => undef, 'CGI' => undef, 'CGI::Apache' => undef, 'CGI::Carp' => undef, @@ -9595,10 +10241,10 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'CPANPLUS::Shell::Default::Plugins::CustomSource'=> undef, 'CPANPLUS::Shell::Default::Plugins::Remote'=> undef, 'CPANPLUS::Shell::Default::Plugins::Source'=> undef, - 'CPANPLUS::inc' => undef, 'Class::ISA' => undef, 'Compress::Raw::Bzip2' => undef, 'Compress::Raw::Zlib' => undef, + 'Compress::Zlib' => undef, 'Cwd' => undef, 'DB_File' => undef, 'DCLsym' => undef, @@ -9676,8 +10322,6 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'ExtUtils::MY' => undef, 'ExtUtils::MakeMaker' => undef, 'ExtUtils::MakeMaker::Config'=> undef, - 'ExtUtils::MakeMaker::bytes'=> undef, - 'ExtUtils::MakeMaker::vmsish'=> undef, 'ExtUtils::Manifest' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-Manifest', 'ExtUtils::Mkbootstrap' => undef, 'ExtUtils::Mksymlists' => undef, @@ -9686,6 +10330,7 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'ExtUtils::testlib' => undef, 'Fatal' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie', 'File::Fetch' => undef, + 'File::GlobMapper' => undef, 'File::Path' => undef, 'File::Spec' => undef, 'File::Spec::Cygwin' => undef, @@ -9702,6 +10347,20 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'Filter::Util::Call' => undef, 'Getopt::Long' => undef, 'IO' => undef, + 'IO::Compress::Adapter::Bzip2'=> undef, + 'IO::Compress::Adapter::Deflate'=> undef, + 'IO::Compress::Adapter::Identity'=> undef, + 'IO::Compress::Base' => undef, + 'IO::Compress::Base::Common'=> undef, + 'IO::Compress::Bzip2' => undef, + 'IO::Compress::Deflate' => undef, + 'IO::Compress::Gzip' => undef, + 'IO::Compress::Gzip::Constants'=> undef, + 'IO::Compress::RawDeflate'=> undef, + 'IO::Compress::Zip' => undef, + 'IO::Compress::Zip::Constants'=> undef, + 'IO::Compress::Zlib::Constants'=> undef, + 'IO::Compress::Zlib::Extra'=> undef, 'IO::Dir' => undef, 'IO::File' => undef, 'IO::Handle' => undef, @@ -9712,6 +10371,17 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'IO::Socket' => undef, 'IO::Socket::INET' => undef, 'IO::Socket::UNIX' => undef, + 'IO::Uncompress::Adapter::Bunzip2'=> undef, + 'IO::Uncompress::Adapter::Identity'=> undef, + 'IO::Uncompress::Adapter::Inflate'=> undef, + 'IO::Uncompress::AnyInflate'=> undef, + 'IO::Uncompress::AnyUncompress'=> undef, + 'IO::Uncompress::Base' => undef, + 'IO::Uncompress::Bunzip2'=> undef, + 'IO::Uncompress::Gunzip'=> undef, + 'IO::Uncompress::Inflate'=> undef, + 'IO::Uncompress::RawInflate'=> undef, + 'IO::Uncompress::Unzip' => undef, 'IO::Zlib' => undef, 'IPC::Cmd' => undef, 'IPC::Msg' => undef, @@ -9719,6 +10389,8 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'IPC::SharedMem' => undef, 'IPC::SysV' => undef, 'List::Util' => undef, + 'List::Util::PP' => undef, + 'List::Util::XS' => undef, 'Locale::Constants' => undef, 'Locale::Country' => undef, 'Locale::Currency' => undef, @@ -9865,6 +10537,7 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'Pod::Usage' => undef, 'Safe' => undef, 'Scalar::Util' => undef, + 'Scalar::Util::PP' => undef, 'SelfLoader' => undef, 'Shell' => undef, 'Stdio' => undef, @@ -9944,6 +10617,7 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'autodie' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie', 'autodie::exception' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie', 'autodie::exception::system'=> 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie', + 'autodie::hints' => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=autodie', 'base' => undef, 'bigint' => undef, 'bignum' => undef, @@ -9953,7 +10627,6 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'encoding::warnings' => undef, 'fields' => undef, 'if' => undef, - 'lib' => undef, 'parent' => undef, 'threads' => undef, 'threads::shared' => undef, @@ -9961,6 +10634,7 @@ for my $version ( sort { $a <=> $b } keys %released ) { 'warnings' => undef, ); + # Create aliases with trailing zeros for $] use $released{'5.000'} = $released{5}; diff --git a/lib/Test/Simple/t/exit.t b/lib/Test/Simple/t/exit.t index 96f3a7eaed..95661eef07 100644 --- a/lib/Test/Simple/t/exit.t +++ b/lib/Test/Simple/t/exit.t @@ -28,6 +28,7 @@ if( $^O eq 'VMS' ) { $Perl = "MCR $^X" if $] < 5.007003; # Quiet noisy 'SYS$ABORT' + $Perl .= q{ -"I../lib"} if $ENV{PERL_CORE}; $Perl .= q{ -"Mvmsish=hushed"}; } diff --git a/pod/perl5110delta.pod b/pod/perl5110delta.pod index b4c2cdcf83..c7cb8ae8d6 100644 --- a/pod/perl5110delta.pod +++ b/pod/perl5110delta.pod @@ -156,6 +156,12 @@ L<TAP::Harness> needs to be able to schedule individual non-conflicting test scripts itself, and there is no standard interface to C<make> utilities to interact with their job schedulers. +=head2 The C<...> operator + +A new operator, C<...>, nicknamed the Yada Yada operator, has been added. +It is intended to mark placeholder code, that is not yet implemented. +See L<perlop/"Yada Yada Operator">. (chromatic) + =head1 Modules and Pragmata =head2 Pragmata Changes diff --git a/pod/perldata.pod b/pod/perldata.pod index 8f0feb7fed..3c1a95e2c4 100644 --- a/pod/perldata.pod +++ b/pod/perldata.pod @@ -371,11 +371,6 @@ equivalent to C<$version{2}++>, not to C<$version{'2.0'}++>. =head3 Version Strings X<version string> X<vstring> X<v-string> -B<Note:> Version Strings (v-strings) have been deprecated. They will -be removed in some future release after Perl 5.8.1. The marginal -benefits of v-strings were greatly outweighed by the potential for -Surprise and Confusion. - A literal of the form C<v1.20.300.4000> is parsed as a string composed of characters with the specified ordinals. This form, known as v-strings, provides an alternative, more readable way to construct diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 9d58104ab8..1775163cf7 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -316,8 +316,8 @@ release of Perl 5. =item Attribute "unique" is deprecated (D deprecated) You have used the attributes pragam to modify the "unique" -attribute on a array, hash or scalar reference. The :unique attribute is has -had no no effect since Perl 5.8.8, and will be removed in the next major +attribute on an array, hash or scalar reference. The :unique attribute has +had no effect since Perl 5.8.8, and will be removed in the next major release of Perl 5. =item Bad arg length for %s, is %d, should be %d diff --git a/pod/perlop.pod b/pod/perlop.pod index e6774303ee..23f62e09ab 100644 --- a/pod/perlop.pod +++ b/pod/perlop.pod @@ -813,14 +813,11 @@ between keys and values in hashes, and other paired elements in lists. %hash = ( $key => $value ); login( $username => $password ); -=head2 Yada Yada Operators -X<...> X<... operator> X<!!!> X<!!! operator> X<???> X<??? operator> -X<yada yada operator> +=head2 Yada Yada Operator +X<...> X<... operator> X<yada yada operator> -The yada yada operators are placeholders for code. They parse without error, -but when executed either throw an exception or a warning. - -The C<...> operator takes no arguments. When executed, it throws an exception +The yada yada operator (noted C<...>) is a placeholder for code. +It parses without error, but when executed it throws an exception with the text C<Unimplemented>: sub foo { ... } @@ -828,23 +825,7 @@ with the text C<Unimplemented>: Unimplemented at <file> line <line number>. -The C<!!!> operator is similar, but it takes one argument, a string to use as -the text of the exception: - - sub bar { !!! "Don't call me, Ishmael!" } - bar(); - - Don't call me, Ishmael! at <file> line <line number>. - -The C<???> operator also takes one argument, but it emits a warning instead of -throwing an exception: - - sub baz { ??? "Who are you? What do you want?" } - baz(); - say "Why are you here?"; - - Who are you? What do you want? at <file> line <line number>. - Why are you here? +It takes no argument. =head2 List Operators (Rightward) X<operator, list, rightward> X<list operator> diff --git a/pod/perltodo.pod b/pod/perltodo.pod index c84b51e368..06b5c771e0 100644 --- a/pod/perltodo.pod +++ b/pod/perltodo.pod @@ -804,6 +804,20 @@ also the warning messages (see L<perllexwarn>, C<warnings.pl>). These tasks would need C knowledge, and knowledge of how the interpreter works, or a willingness to learn. +=head2 forbid labels with keyword names + +Currently C<goto keyword> "computes" the label value: + + $ perl -e 'goto print' + Can't find label 1 at -e line 1. + +It would be nice to forbid labels with keyword names, to avoid confusion. + +=head2 truncate() prototype + +The prototype of truncate() is currently C<$$>. It should probably +be C<*$> instead. (This is changed in F<opcode.pl>) + =head2 error reporting of [$a ; $b] Using C<;> inside brackets is a syntax error, and we don't propose to change @@ -2624,6 +2624,8 @@ PP(pp_goto) case CXt_LOOP_LAZYSV: case CXt_LOOP_FOR: case CXt_LOOP_PLAIN: + case CXt_GIVEN: + case CXt_WHEN: gotoprobe = cx->blk_oldcop->op_sibling; break; case CXt_SUBST: @@ -3911,13 +3913,7 @@ PP(pp_entergiven) ENTER; SAVETMPS; - if (PL_op->op_targ == 0) { - SV ** const defsv_p = &GvSV(PL_defgv); - *defsv_p = newSVsv(POPs); - SAVECLEARSV(*defsv_p); - } - else - sv_setsv(PAD_SV(PL_op->op_targ), POPs); + sv_setsv(PAD_SV(PL_op->op_targ), POPs); PUSHBLOCK(cx, CXt_GIVEN, SP); PUSHGIVEN(cx); @@ -9452,7 +9452,8 @@ Perl_reg_temp_copy (pTHX_ REGEXP *rx) a case of zero-ing that, rather than copying the current length. */ SvPV_set(ret_x, RX_WRAPPED(rx)); SvFLAGS(ret_x) |= SvFLAGS(rx) & (SVf_POK|SVp_POK|SVf_UTF8); - StructCopy(&(r->xpv_cur), &(ret->xpv_cur), struct regexp_allocated); + memcpy(&(ret->xpv_cur), &(r->xpv_cur), + sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur)); SvLEN_set(ret_x, 0); Newx(ret->offs, npar, regexp_paren_pair); Copy(r->offs, ret->offs, npar, regexp_paren_pair); @@ -107,12 +107,6 @@ typedef struct regexp { _REGEXP_COMMON; } regexp; -struct regexp_allocated { - _XPV_ALLOCATED_HEAD; - _XPVMG_HEAD; - _REGEXP_COMMON; -}; - /* HV *paren_names; Optional hash of paren names now stored in the IV union */ @@ -783,25 +783,29 @@ type. Most body types use the former pair, the latter pair is used to allocate body types with "ghost fields". "ghost fields" are fields that are unused in certain types, and -consequently dont need to actually exist. They are declared because +consequently don't need to actually exist. They are declared because they're part of a "base type", which allows use of functions as methods. The simplest examples are AVs and HVs, 2 aggregate types which don't use the fields which support SCALAR semantics. -For these types, the arenas are carved up into *_allocated size +For these types, the arenas are carved up into appropriately sized chunks, we thus avoid wasted memory for those unaccessed members. When bodies are allocated, we adjust the pointer back in memory by the -size of the bit not allocated, so it's as if we allocated the full +size of the part not allocated, so it's as if we allocated the full structure. (But things will all go boom if you write to the part that is "not there", because you'll be overwriting the last members of the preceding structure in memory.) -We calculate the correction using the STRUCT_OFFSET macro. For -example, if xpv_allocated is the same structure as XPV then the two -OFFSETs sum to zero, and the pointer is unchanged. If the allocated -structure is smaller (no initial NV actually allocated) then the net -effect is to subtract the size of the NV from the pointer, to return a -new pointer as if an initial NV were actually allocated. +We calculate the correction using the STRUCT_OFFSET macro on the first +member present. If the allocated structure is smaller (no initial NV +actually allocated) then the net effect is to subtract the size of the NV +from the pointer, to return a new pointer as if an initial NV were actually +allocated. (We were using structures named *_allocated for this, but +this turned out to be a subtle bug, because a structure without an NV +could have a lower alignment constraint, but the compiler is allowed to +optimised accesses based on the alignment constraint of the actual pointer +to the full structure, for example, using a single 64 bit load instruction +because it "knows" that two adjacent 32 bit members will be 8-byte aligned.) This is the same trick as was used for NV and IV bodies. Ironically it doesn't need to be used for NV bodies any more, because NV is now at @@ -835,11 +839,11 @@ zero, forcing individual mallocs and frees. Body_size determines how big a body is, and therefore how many fit into each arena. Offset carries the body-pointer adjustment needed for -*_allocated body types, and is used in *_allocated macros. +"ghost fields", and is used in *_allocated macros. But its main purpose is to parameterize info needed in Perl_sv_upgrade(). The info here dramatically simplifies the function -vs the implementation in 5.8.7, making it table-driven. All fields +vs the implementation in 5.8.8, making it table-driven. All fields are used for this, except for arena_size. For the sv-types that have no bodies, arenas are not used, so those @@ -901,26 +905,6 @@ struct body_details { ? FIT_ARENAn (count, body_size) \ : FIT_ARENA0 (body_size) -/* A macro to work out the offset needed to subtract from a pointer to (say) - -typedef struct { - STRLEN xpv_cur; - STRLEN xpv_len; -} xpv_allocated; - -to make its members accessible via a pointer to (say) - -struct xpv { - NV xnv_nv; - STRLEN xpv_cur; - STRLEN xpv_len; -}; - -*/ - -#define relative_STRUCT_OFFSET(longer, shorter, member) \ - (STRUCT_OFFSET(shorter, member) - STRUCT_OFFSET(longer, member)) - /* Calculate the length to copy. Specifically work out the length less any final padding the compiler needed to add. See the comment in sv_upgrade for why copying the padding proved to be a bug. */ @@ -953,18 +937,18 @@ static const struct body_details bodies_by_type[] = { FIT_ARENA(0, sizeof(NV)) }, /* 8 bytes on most ILP32 with IEEE doubles */ - { sizeof(xpv_allocated), - copy_length(XPV, xpv_len) - - relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur), - + relative_STRUCT_OFFSET(xpv_allocated, XPV, xpv_cur), - SVt_PV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpv_allocated)) }, + { sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur), + copy_length(XPV, xpv_len) - STRUCT_OFFSET(XPV, xpv_cur), + + STRUCT_OFFSET(XPV, xpv_cur), + SVt_PV, FALSE, NONV, HASARENA, + FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) }, /* 12 */ - { sizeof(xpviv_allocated), - copy_length(XPVIV, xiv_u) - - relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur), - + relative_STRUCT_OFFSET(xpviv_allocated, XPVIV, xpv_cur), - SVt_PVIV, FALSE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpviv_allocated)) }, + { sizeof(XPVIV) - STRUCT_OFFSET(XPV, xpv_cur), + copy_length(XPVIV, xiv_u) - STRUCT_OFFSET(XPV, xpv_cur), + + STRUCT_OFFSET(XPVIV, xpv_cur), + SVt_PVIV, FALSE, NONV, HASARENA, + FIT_ARENA(0, sizeof(XPV) - STRUCT_OFFSET(XPV, xpv_cur)) }, /* 20 */ { sizeof(XPVNV), copy_length(XPVNV, xiv_u), 0, SVt_PVNV, FALSE, HADNV, @@ -975,10 +959,11 @@ static const struct body_details bodies_by_type[] = { HASARENA, FIT_ARENA(0, sizeof(XPVMG)) }, /* something big */ - { sizeof(struct regexp_allocated), sizeof(struct regexp_allocated), - + relative_STRUCT_OFFSET(struct regexp_allocated, regexp, xpv_cur), + { sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur), + sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur), + + STRUCT_OFFSET(regexp, xpv_cur), SVt_REGEXP, FALSE, NONV, HASARENA, - FIT_ARENA(0, sizeof(struct regexp_allocated)) + FIT_ARENA(0, sizeof(regexp) - STRUCT_OFFSET(regexp, xpv_cur)) }, /* 48 */ @@ -989,31 +974,37 @@ static const struct body_details bodies_by_type[] = { { sizeof(XPVLV), sizeof(XPVLV), 0, SVt_PVLV, TRUE, HADNV, HASARENA, FIT_ARENA(0, sizeof(XPVLV)) }, - { sizeof(xpvav_allocated), - copy_length(XPVAV, xmg_stash) - - relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill), - + relative_STRUCT_OFFSET(xpvav_allocated, XPVAV, xav_fill), - SVt_PVAV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvav_allocated)) }, + { sizeof(XPVAV) - STRUCT_OFFSET(XPVAV, xav_fill), + copy_length(XPVAV, xmg_stash) - STRUCT_OFFSET(XPVAV, xav_fill), + + STRUCT_OFFSET(XPVAV, xav_fill), + SVt_PVAV, TRUE, NONV, HASARENA, + FIT_ARENA(0, sizeof(XPVAV) - STRUCT_OFFSET(XPVAV, xav_fill)) }, - { sizeof(xpvhv_allocated), - copy_length(XPVHV, xmg_stash) - - relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill), - + relative_STRUCT_OFFSET(xpvhv_allocated, XPVHV, xhv_fill), - SVt_PVHV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvhv_allocated)) }, + { sizeof(XPVHV) - STRUCT_OFFSET(XPVHV, xhv_fill), + copy_length(XPVHV, xmg_stash) - STRUCT_OFFSET(XPVHV, xhv_fill), + + STRUCT_OFFSET(XPVHV, xhv_fill), + SVt_PVHV, TRUE, NONV, HASARENA, + FIT_ARENA(0, sizeof(XPVHV) - STRUCT_OFFSET(XPVHV, xhv_fill)) }, /* 56 */ - { sizeof(xpvcv_allocated), sizeof(xpvcv_allocated), - + relative_STRUCT_OFFSET(xpvcv_allocated, XPVCV, xpv_cur), - SVt_PVCV, TRUE, NONV, HASARENA, FIT_ARENA(0, sizeof(xpvcv_allocated)) }, - - { sizeof(xpvfm_allocated), sizeof(xpvfm_allocated), - + relative_STRUCT_OFFSET(xpvfm_allocated, XPVFM, xpv_cur), - SVt_PVFM, TRUE, NONV, NOARENA, FIT_ARENA(20, sizeof(xpvfm_allocated)) }, + { sizeof(XPVCV) - STRUCT_OFFSET(XPVCV, xpv_cur), + sizeof(XPVCV) - STRUCT_OFFSET(XPVCV, xpv_cur), + + STRUCT_OFFSET(XPVCV, xpv_cur), + SVt_PVCV, TRUE, NONV, HASARENA, + FIT_ARENA(0, sizeof(XPVCV) - STRUCT_OFFSET(XPVCV, xpv_cur)) }, + + { sizeof(XPVFM) - STRUCT_OFFSET(XPVFM, xpv_cur), + sizeof(XPVFM) - STRUCT_OFFSET(XPVFM, xpv_cur), + + STRUCT_OFFSET(XPVFM, xpv_cur), + SVt_PVFM, TRUE, NONV, NOARENA, + FIT_ARENA(20, sizeof(XPVFM) - STRUCT_OFFSET(XPVFM, xpv_cur)) }, /* XPVIO is 84 bytes, fits 48x */ - { sizeof(xpvio_allocated), sizeof(xpvio_allocated), - + relative_STRUCT_OFFSET(xpvio_allocated, XPVIO, xpv_cur), - SVt_PVIO, TRUE, NONV, HASARENA, FIT_ARENA(24, sizeof(xpvio_allocated)) }, + { sizeof(XPVIO) - STRUCT_OFFSET(XPVIO, xpv_cur), + sizeof(XPVIO) - STRUCT_OFFSET(XPVIO, xpv_cur), + + STRUCT_OFFSET(XPVIO, xpv_cur), + SVt_PVIO, TRUE, NONV, HASARENA, + FIT_ARENA(24, sizeof(XPVIO) - STRUCT_OFFSET(XPVIO, xpv_cur)) }, }; #define new_body_type(sv_type) \ @@ -3665,6 +3656,7 @@ S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr) SV **location; U8 import_flag = 0; const U32 stype = SvTYPE(sref); + bool mro_changes = FALSE; PERL_ARGS_ASSERT_GLOB_ASSIGN_REF; @@ -3685,6 +3677,8 @@ S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr) goto common; case SVt_PVAV: location = (SV **) &GvAV(dstr); + if (strEQ(GvNAME((GV*)dstr), "ISA")) + mro_changes = TRUE; import_flag = GVf_IMPORTED_AV; goto common; case SVt_PVIO: @@ -3763,6 +3757,7 @@ S_glob_assign_ref(pTHX_ SV *const dstr, SV *const sstr) SvREFCNT_dec(dref); if (SvTAINTED(sstr)) SvTAINT(dstr); + if (mro_changes) mro_isa_changed_in(GvSTASH(dstr)); return; } @@ -567,12 +567,6 @@ struct xpvio { _XPVIO_TAIL; }; -typedef struct { - _XPV_ALLOCATED_HEAD; - _XPVMG_HEAD; - _XPVIO_TAIL; -} xpvio_allocated; - #define xio_dirp xio_dirpu.xiou_dirp #define xio_any xio_dirpu.xiou_any diff --git a/t/mro/basic.t b/t/mro/basic.t index e06622649e..8568517244 100644 --- a/t/mro/basic.t +++ b/t/mro/basic.t @@ -3,7 +3,7 @@ use strict; use warnings; -require q(./test.pl); plan(tests => 40); +require q(./test.pl); plan(tests => 42); require mro; @@ -233,3 +233,18 @@ is(eval { MRO_N->testfunc() }, 123); is($stk_obj->foo(3), 6); } +{ + { + # assigning @ISA via arrayref to globref RT 60220 + package P1; + sub new { bless {}, shift } + + package P2; + } + *{P2::ISA} = [ 'P1' ]; + my $foo = P2->new; + ok(!eval { $foo->bark }, "no bark method"); + no warnings 'once'; # otherwise it'll bark about P1::bark used only once + *{P1::bark} = sub { "[bark]" }; + is(scalar eval { $foo->bark }, "[bark]", "can bark now"); +} diff --git a/t/op/reg_60508.t b/t/op/reg_60508.t new file mode 100644 index 0000000000..96a4fefcbe --- /dev/null +++ b/t/op/reg_60508.t @@ -0,0 +1,40 @@ +#!./perl + +# This is a test for rt.cpan.org 60508 which I can't figure out where else +# to put it or what the underlying problem is, but it has to go somewhere. +# --Schwern + +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; + require './test.pl'; +} + +use utf8; +plan tests => 1; + +{ + my $expect = <<"EXPECT"; +k1 = .... +k2.1 = >\x{2022} +k2.2 = \x{2022} +EXPECT + utf8::encode($expect); + + local $TODO = "rt.cpan.org 60508"; + + fresh_perl_is(<<'CODE', $expect, {}); +binmode STDOUT, ":utf8"; +sub f { $_[0] =~ s/([>X])//g; } + +$k1 = "." x 4 . ">>"; +f($k1); +print "k1 = $k1\n"; + +$k2 = "\x{f1}\x{2022}"; +$k2 =~ s/([\360-\362])/>/g; +print "k2.1 = $k2\n"; +f($k2); +print "k2.2 = $k2\n"; +CODE +} diff --git a/t/op/switch.t b/t/op/switch.t index 2012c6c148..dcec866b8d 100644 --- a/t/op/switch.t +++ b/t/op/switch.t @@ -9,7 +9,7 @@ BEGIN { use strict; use warnings; -plan tests => 122; +plan tests => 127; # The behaviour of the feature pragma should be tested by lib/switch.t # using the tests in t/lib/switch/*. This file tests the behaviour of @@ -965,6 +965,56 @@ LETTER2: for ("a".."e") { } is($letter, "a,c,e,", "next LABEL in when"); +# Test goto with given/when +{ + my $flag = 0; + goto GIVEN1; + $flag = 1; + GIVEN1: given ($flag) { + when (0) { break; } + $flag = 2; + } + is($flag, 0, "goto GIVEN1"); +} +{ + my $flag = 0; + given ($flag) { + when (0) { $flag = 1; } + goto GIVEN2; + $flag = 2; + } +GIVEN2: + is($flag, 1, "goto inside given"); +} +{ + my $flag = 0; + given ($flag) { + when (0) { $flag = 1; goto GIVEN3; $flag = 2; } + $flag = 3; + } +GIVEN3: + is($flag, 1, "goto inside given and when"); +} +{ + my $flag = 0; + for ($flag) { + when (0) { $flag = 1; goto GIVEN4; $flag = 2; } + $flag = 3; + } +GIVEN4: + is($flag, 1, "goto inside for and when"); +} +{ + my $flag = 0; +GIVEN5: + given ($flag) { + when (0) { $flag = 1; goto GIVEN5; $flag = 2; } + when (1) { break; } + $flag = 3; + } + is($flag, 1, "goto inside given and when to the given stmt"); +} + # Okay, that'll do for now. The intricacies of the smartmatch # semantics are tested in t/op/smartmatch.t __END__ diff --git a/t/op/yadayada.t b/t/op/yadayada.t index deca46c789..f82aa72537 100644 --- a/t/op/yadayada.t +++ b/t/op/yadayada.t @@ -8,38 +8,10 @@ BEGIN { use strict; -plan 5; +plan 1; my $err = "Unimplemented at $0 line " . ( __LINE__ + 2 ) . ".\n"; eval { ... }; is $@, $err; - -$err = "foo at $0 line " . ( __LINE__ + 2 ) . ".\n"; - -eval { !!! "foo" }; - -is $@, $err; - -$err = "Died at $0 line " . ( __LINE__ + 2 ) . ".\n"; - -eval { !!! }; - -is $@, $err; - -my $warning; - -local $SIG{__WARN__} = sub { $warning = shift }; - -$err = "bar at $0 line " . ( __LINE__ + 2 ) . ".\n"; - -eval { ??? "bar" }; - -is $warning, $err; - -$err = "Warning: something's wrong at $0 line " . ( __LINE__ + 2 ) . ".\n"; - -eval { ??? }; - -is $warning, $err; diff --git a/t/pod/pod2usage2.t b/t/pod/pod2usage2.t index d0097eea81..def8bea7e6 100644 --- a/t/pod/pod2usage2.t +++ b/t/pod/pod2usage2.t @@ -223,8 +223,9 @@ EOT # test with pod_where use_ok('Pod::Find', qw(pod_where)); -# Exclude current dir when testing in CORE under Cygwin -my @NO_CURDIR = ($^O eq 'cygwin' && $ENV{PERL_CORE}) ++# Exclude current dir when testing in CORE; otherwise on case-insensitive ++# systems, when in t/ we find pod/usage.pod rather than # ../lib/Pod/Usage.pm ++my @NO_CURDIR = ($ENV{PERL_CORE}) ? ('-dirs' => []) : (); diff --git a/t/run/switches.t b/t/run/switches.t index 839a860864..57998ddeda 100644 --- a/t/run/switches.t +++ b/t/run/switches.t @@ -193,6 +193,9 @@ SWTESTPM is( $r, "<$package><foo><bar>", '-m with import parameters' ); push @tmpfiles, $filename; + { + local $TODO = ''; # these work on VMS + is( runperl( switches => [ '-MTie::Hash' ], stderr => 1, prog => 1 ), '', "-MFoo::Bar allowed" ); @@ -220,6 +223,7 @@ SWTESTPM prog => 'die "oops"' ), qr/Module name required with -M option\b/, "-M- not allowed" ); + } # disable TODO on VMS } # Tests for -V @@ -330,6 +334,8 @@ __EOF__ # Tests for -E +$TODO = ''; # the -E tests work on VMS + $r = runperl( switches => [ '-E', '"say q(Hello, world!)"'] ); @@ -681,7 +681,7 @@ sub _fresh_perl { my $status = $?; # Clean up the results into something a bit more predictable. - $results =~ s/\n+$//; + $results =~ s/\n+$//; $results =~ s/at\s+$::tempfile_regexp\s+line/at - line/g; $results =~ s/of\s+$::tempfile_regexp\s+aborted/of - aborted/g; @@ -722,6 +722,11 @@ sub _fresh_perl { sub fresh_perl_is { my($prog, $expected, $runperl_args, $name) = @_; + + # _fresh_perl() is going to clip the trailing newlines off the result. + # This will make it so the test author doesn't have to know that. + $expected =~ s/\n+$//; + local $Level = 2; _fresh_perl($prog, sub { @_ ? $_[0] eq $expected : $expected }, @@ -4805,10 +4805,6 @@ Perl_yylex(pTHX) pl_yylval.ival = 0; OPERATOR(ASSIGNOP); case '!': - if (PL_expect == XSTATE && s[1] == '!' && s[2] == '!') { - s += 3; - LOP(OP_DIE,XTERM); - } s++; { const char tmp = *s++; @@ -5060,10 +5056,6 @@ Perl_yylex(pTHX) AOPERATOR(DORDOR); } case '?': /* may either be conditional or pattern */ - if (PL_expect == XSTATE && s[1] == '?' && s[2] == '?') { - s += 3; - LOP(OP_WARN,XTERM); - } if (PL_expect == XOPERATOR) { char tmp = *s++; if(tmp == '?') { |