summaryrefslogtreecommitdiff
path: root/lib/deprecate.pm
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2011-02-18 17:40:27 +0000
committerNicholas Clark <nick@ccl4.org>2011-02-18 18:21:12 +0000
commit4ffaa343250c0abd2cc3ba7ebf2cf89f8b8783cb (patch)
treef10f10327d7a0e62869c7001ad4ebe3233c28357 /lib/deprecate.pm
parent371c4ed4d3e30c6b6dc7a3569b1cae6ed6166464 (diff)
downloadperl-4ffaa343250c0abd2cc3ba7ebf2cf89f8b8783cb.tar.gz
Break out from deprecate::import the "check if it's core" code.
This will allow dprofpp to check whether Devel::DProf is from the core distribution, or from a CPAN install.
Diffstat (limited to 'lib/deprecate.pm')
-rw-r--r--lib/deprecate.pm62
1 files changed, 37 insertions, 25 deletions
diff --git a/lib/deprecate.pm b/lib/deprecate.pm
index 9afa3dcc5d..7562c698f8 100644
--- a/lib/deprecate.pm
+++ b/lib/deprecate.pm
@@ -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,