This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Hash::Util::FieldHash 1.03 leaks SVs which are used as object IDs stored in mg->mg_obj
[perl5.git] / lib / deprecate.pm
CommitLineData
e76b2c0c 1package deprecate;
c0f08d2c 2use strict;
e76b2c0c
NC
3use warnings;
4our $VERSION = 0.01;
5
c0f08d2c
RB
6# our %Config can ignore %Config::Config, e.g. for testing
7our %Config;
8unless (%Config) { require Config; *Config = \%Config::Config; }
9
e76b2c0c
NC
10sub import {
11 my ($package, $file, $line) = caller;
12 my $expect_leaf = "$package.pm";
13 $expect_leaf =~ s!::!/!g;
14
15 foreach my $pair ([qw(sitearchexp archlibexp)],
16 [qw(sitelibexp privlibexp)]) {
17 my ($site, $priv) = @Config{@$pair};
18 # Just in case anyone managed to configure with trailing /s
19 s!/*$!!g foreach $site, $priv;
20
21 next if $site eq $priv;
22 if ("$priv/$expect_leaf" eq $file) {
d4be36a8
RB
23 my $call_depth=1;
24 my @caller;
25 while (@caller = caller $call_depth++) {
26 last if $caller[7] # use/require
27 and $caller[6] eq $expect_leaf; # the package file
28 }
29 unless (@caller) {
30 require Carp;
31 Carp::cluck(<<"EOM");
32Can't find use/require $expect_leaf in caller stack
33EOM
34 next;
35 }
36
e76b2c0c 37 # This is fragile, because it
d4be36a8
RB
38 # is directly poking in the internals of warnings.pm
39 my ($call_file, $call_line, $callers_bitmask) = @caller[1,2,9];
e76b2c0c
NC
40
41 if (defined $callers_bitmask
42 && (vec($callers_bitmask, $warnings::Offsets{deprecated}, 1)
43 || vec($callers_bitmask, $warnings::Offsets{all}, 1))) {
44 warn <<"EOM";
c0f08d2c 45$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.
e76b2c0c
NC
46EOM
47 }
48 return;
49 }
50 }
51}
52
531;
04fd187e
RB
54
55__END__
56
57=head1 NAME
58
b032e888 59deprecate - Perl pragma for deprecating the core version of a module
04fd187e
RB
60
61=head1 SYNOPSIS
62
63 use deprecate; # always deprecate the module in which this occurs
64
65 use if $[ > 5.010, 'deprecate'; # conditionally deprecate the module
66
67
68=head1 DESCRIPTION
69
70This module is used using C<use deprecate;> (or something that calls
71C<< deprecate->import() >>, for example C<use if COND, deprecate;>).
72
73If the module that includes C<use deprecate> is located in a core library
74directory, a deprecation warning is issued, encouraging the user to use
75the version on CPAN. If that module is located in a site library, it is
76the CPAN version, and no warning is issued.
77
78=head2 EXPORT
79
80None by default. The only method is C<import>, called by C<use deprecate;>.
81
82
83=head1 SEE ALSO
84
85First example to C<use deprecate;> was L<Switch>.
86
87
88=head1 AUTHOR
89
90Original version by Nicholas Clark
91
92
93=head1 COPYRIGHT AND LICENSE
94
95Copyright (C) 2009
96
97This library is free software; you can redistribute it and/or modify
98it under the same terms as Perl itself, either Perl version 5.10.0 or,
99at your option, any later version of Perl 5 you may have available.
100
101
102=cut