Break out from deprecate::import the "check if it's core" code.
authorNicholas Clark <nick@ccl4.org>
Fri, 18 Feb 2011 17:40:27 +0000 (17:40 +0000)
committerNicholas Clark <nick@ccl4.org>
Fri, 18 Feb 2011 18:21:12 +0000 (18:21 +0000)
This will allow dprofpp to check whether Devel::DProf is from the core
distribution, or from a CPAN install.

lib/deprecate.pm
pod/perldelta.pod

index 9afa3dc..7562c69 100644 (file)
@@ -7,10 +7,11 @@ our $VERSION = 0.02;
 our %Config;
 unless (%Config) { require Config; *Config = \%Config::Config; }
 
-sub import {
-    my ($package, $file) = caller;
-    my $expect_leaf = "$package.pm";
-    $expect_leaf =~ s!::!/!g;
+# This isn't a public API. It's internal to code maintained by the perl-porters
+# If you would like it to be a public API, please send a patch with
+# documentation and tests. Until then, it may change without warning.
+sub __loaded_from_core {
+    my ($package, $file, $expect_leaf) = @_;
 
     foreach my $pair ([qw(sitearchexp archlibexp)],
                      [qw(sitelibexp privlibexp)]) {
@@ -23,32 +24,43 @@ sub import {
 
        next if $site eq $priv;
        if (uc("$priv/$expect_leaf") eq uc($file)) {
-           my $call_depth=1;
-           my @caller;
-           while (@caller = caller $call_depth++) {
-               last if $caller[7]                      # use/require
-                   and $caller[6] eq $expect_leaf;     # the package file
-           }
-           unless (@caller) {
-               require Carp;
-               Carp::cluck(<<"EOM");
+           return 1;
+       }
+    }
+    return 0;
+}
+
+sub import {
+    my ($package, $file) = caller;
+
+    my $expect_leaf = "$package.pm";
+    $expect_leaf =~ s!::!/!g;
+
+    if (__loaded_from_core($package, $file, $expect_leaf)) {
+       my $call_depth=1;
+       my @caller;
+       while (@caller = caller $call_depth++) {
+           last if $caller[7]                  # use/require
+               and $caller[6] eq $expect_leaf; # the package file
+       }
+       unless (@caller) {
+           require Carp;
+           Carp::cluck(<<"EOM");
 Can't find use/require $expect_leaf in caller stack
 EOM
-               return;
-           }
+           return;
+       }
 
-           # This is fragile, because it
-           # is directly poking in the internals of warnings.pm
-           my ($call_file, $call_line, $callers_bitmask) = @caller[1,2,9];
+       # This is fragile, because it
+       # is directly poking in the internals of warnings.pm
+       my ($call_file, $call_line, $callers_bitmask) = @caller[1,2,9];
 
-           if (defined $callers_bitmask
-               && (vec($callers_bitmask, $warnings::Offsets{deprecated}, 1)
-                   || vec($callers_bitmask, $warnings::Offsets{all}, 1))) {
-               warn <<"EOM";
+       if (defined $callers_bitmask
+           && (vec($callers_bitmask, $warnings::Offsets{deprecated}, 1)
+               || vec($callers_bitmask, $warnings::Offsets{all}, 1))) {
+           warn <<"EOM";
 $package will be removed from the Perl core distribution in the next major release. Please install it from CPAN. It is being used at $call_file, line $call_line.
 EOM
-           }
-           return;
        }
     }
 }
@@ -95,7 +107,7 @@ Original version by Nicholas Clark
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2009 
+Copyright (C) 2009, 2011
 
 This library is free software; you can redistribute it and/or modify
 it under the same terms as Perl itself, either Perl version 5.10.0 or,
index a1691fb..351d8df 100644 (file)
@@ -239,6 +239,10 @@ using Digest::SHA for CPAN checksums.
 
 =item *
 
+C<deprecate> has been upgraded from version 0.01 to 0.02.
+
+=item *
+
 C<diagnostics> has been upgraded from version 1.21 to 1.22.
 
 It now renders pod links slightly better, and has been taught to find