/usr/share/perl5/Class/MakeMethods/Template/ClassInherit.pm is in libclass-makemethods-perl 1.01-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | =head1 NAME
Class::MakeMethods::Template::ClassInherit - Overridable class data
=head1 SYNOPSIS
package MyClass;
use Class::MakeMethods( 'Template::ClassInherit:scalar' => 'foo' );
# We now have an accessor method for an "inheritable" scalar value
package main;
MyClass->foo( 'Foozle' ); # Set a class-wide value
print MyClass->foo(); # Retrieve class-wide value
...
package MySubClass;
@ISA = 'MyClass';
print MySubClass->foo(); # Intially same as superclass,
MySubClass->foo('Foobar'); # but overridable per subclass/
=head1 DESCRIPTION
The MakeMethods subclass provides accessor methods that search an inheritance tree to find a value. This allows you to set a shared or default value for a given class, and optionally override it in a subclass.
=cut
########################################################################
package Class::MakeMethods::Template::ClassInherit;
use Class::MakeMethods::Template::Generic '-isasubclass';
$VERSION = 1.008;
use strict;
require 5.0;
use Carp;
sub generic {
{
'-import' => {
'Template::Generic:generic' => '*'
},
'modifier' => {
'-all' => [ q{
_INIT_VALUE_CLASS_
*
} ],
},
'code_expr' => {
'_VALUE_CLASS_' => '$_value_class',
'_INIT_VALUE_CLASS_' => q{
my _VALUE_CLASS_;
for ( my @_INC_search = _SELF_CLASS_; scalar @_INC_search; ) {
_VALUE_CLASS_ = shift @_INC_search;
last if ( exists _ATTR_{data}->{_VALUE_CLASS_} );
no strict 'refs';
unshift @_INC_search, @{"_VALUE_CLASS_\::ISA"};
}
},
'_VALUE_' => '_ATTR_{data}->{_VALUE_CLASS_}',
'_GET_VALUE_' => q{ _ATTR_{data}->{_VALUE_CLASS_} },
'_SET_VALUE_{}' => q{ ( _VALUE_CLASS_ = _SELF_CLASS_ and _ATTR_{data}->{_VALUE_CLASS_} = * ) },
},
}
}
########################################################################
=head2 Standard Methods
The following methods from Generic should all be supported:
scalar
string
string_index (?)
number
boolean
bits (?)
array (*)
hash (*)
tiedhash (?)
hash_of_arrays (?)
object (?)
instance (?)
array_of_objects (?)
code (?)
code_or_scalar (?)
See L<Class::MakeMethods::Template::Generic> for the interfaces and behaviors of these method types.
The items marked with a * above are specifically defined in this package, whereas the others are formed automatically by the interaction of this package's generic settings with the code templates provided by the Generic superclass.
The items marked with a ? above have not been tested sufficiently; please inform the author if they do not function as you would expect.
=cut
sub array {
{
'-import' => {
'Template::Generic:array' => '*',
},
'modifier' => {
'-all' => [ q{ _VALUE_ ||= []; * } ],
},
'code_expr' => {
'_VALUE_' => '\@{_ATTR_{data}->{_SELF_CLASS_}}',
},
}
}
sub hash {
{
'-import' => {
'Template::Generic:hash' => '*',
},
'modifier' => {
'-all' => [ q{ _VALUE_ ||= {}; * } ],
},
'code_expr' => {
'_VALUE_' => '\%{_ATTR_{data}->{_SELF_CLASS_}}',
},
}
}
########################################################################
=head1 SEE ALSO
See L<Class::MakeMethods> for general information about this distribution.
See L<Class::MakeMethods::Template> for more about this family of subclasses.
See L<Class::MakeMethods::Template::Generic> for information about the various accessor interfaces subclassed herein.
If you just need scalar accessors, see L<Class::Data::Inheritable> for a very elegant and efficient implementation.
=cut
########################################################################
1;
|