1MooseX::Deprecated(3) User Contributed Perl DocumentationMooseX::Deprecated(3)
2
3
4
6 MooseX::Deprecated - mark attributes and methods as deprecated
7
9 package Goose
10 {
11 use Moose;
12
13 has feathers => (is => 'ro');
14
15 sub honk { say "Honk!" }
16
17 with "MooseX::Deprecated" => {
18 attributes => [ "feathers" ],
19 methods => [ "honk" ],
20 };
21 }
22
24 MooseX::Deprecated is a parameterizable role that makes it easy to
25 deprecate particular attributes and methods in a class.
26
27 In the SYNOPSIS above, "before" method modifiers will be installed on
28 the "feathers" accessor and the "honk" method, issuing a deprecation
29 warning. Additionally, an "after" modifier will be installed on the
30 class' "BUILD" method which will issue deprecation warnings for any
31 deprecated attributes passed to the constructor.
32
33 The warning text will be something along the lines of: "%s is a
34 deprecated %s"
35
36 Warnings are issued in the "deprecated" warnings category, so can be
37 disabled using:
38
39 no warnings qw( deprecated );
40
41 Warnings can be upgraded to fatal errors with:
42
43 use warnings FATAL => qw( deprecated );
44
45 Warnings will only be issued once per call site.
46
47 When consuming the role you must pass either a list of attributes, or a
48 list of methods, or both, as parameters to the role. If you forget to
49 do so, you'll get an error message like: "%s with no list of attributes
50 or methods".
51
53 To deprecate an attribute, the attribute must actually exist at the
54 time you consume this role. In particular, this will not work:
55
56 package Goose
57 {
58 use Moose;
59
60 with "MooseX::Deprecated" => {
61 attributes => [ "feathers" ],
62 };
63
64 has feathers => (is => 'ro');
65 }
66
67 Because the "feathers" attribute isn't defined until after the role is
68 consumed. Attempting the above will die with a nasty error message:
69 "Attribute %s does not exist in %s so cannot be deprecated".
70
71 If a deprecated attribute handles any methods via delegation, then
72 calling these methods will result in not one, but two warnings. One
73 warning for calling the delegated method; the other warning for calling
74 the accessor (reader) to obtain the object to delegate to. This could
75 theoretically be changed, but I'm comfortable with the existing
76 situation.
77
78 Warnings issued by the accessor (reader) during method delegation come
79 from inside your class, and thus the caller cannot disable them or
80 fatalize them.
81
83 Please report any bugs to
84 <http://rt.cpan.org/Dist/Display.html?Queue=MooseX-Deprecated>.
85
86 Perl 5.8
87 The behaviour of "warnings::warnif" changed significantly between Perl
88 5.8 and 5.10; the location considered to be the effective caller
89 changed from being "like "warn"" to being "like "carp"" (the latter
90 being considerably more useful). Therefore under Perl 5.8, doing things
91 like "no warnings "deprecated"" in your code to control warnings from
92 this role is rather useless, because your code is unlikely to be
93 considered to be the caller.
94
95 In the test suite I just skip the complex test that checks for this on
96 Perl prior to 5.10, allowing you to install this module without a hitch
97 on Perl 5.8. However, you are strongly discouraged from using this
98 module with Perl 5.8.
99
101 Package::DeprecationManager provides a more powerful and complicated
102 set of features. I'm a simple kind of guy, and don't see the need to
103 allow my caller to pick and choose which deprecations they'd like to
104 ignore based on some API version.
105
106 Attribute::Deprecated is cute, but only deals with methods, and
107 ironically not (what Moose calls) attributes.
108
109 Devel::Deprecation has some pretty nice features, but is more manual
110 than I'd like, and again only deals with methods.
111
112 Not to be confused with Moose::Deprecated which can be used to manage
113 warnings issued by Moose itself.
114
115 <http://en.wikipedia.org/wiki/Self-deprecation>.
116
118 Toby Inkster <tobyink@cpan.org>.
119
121 This software is copyright (c) 2013-2014 by Toby Inkster.
122
123 This is free software; you can redistribute it and/or modify it under
124 the same terms as the Perl 5 programming language system itself.
125
127 THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
128 WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
129 MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
130
131
132
133perl v5.36.0 2022-07-22 MooseX::Deprecated(3)