/usr/share/perl5/Class/MakeMethods/Attribute.pm is in libclass-makemethods-perl 1.01-4.
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 | package Class::MakeMethods::Attribute;
require 5.006;
use strict;
use Carp;
use Attribute::Handlers;
use Class::MakeMethods;
use Class::MakeMethods::Utility::Inheritable 'get_vvalue';
our $VERSION = 1.005;
our %DefaultMaker;
sub import {
my $class = shift;
if ( scalar @_ and $_[0] =~ m/^\d/ ) {
Class::MakeMethods::_import_version( $class, shift );
}
if ( scalar @_ == 1 ) {
my $target_class = ( caller(0) )[0];
$DefaultMaker{ $target_class } = shift;
}
}
sub UNIVERSAL::MakeMethod :ATTR(CODE) {
my ($package, $symbol, $referent, $attr, $data) = @_;
if ( $symbol eq 'ANON' or $symbol eq 'LEXICAL' ) {
croak "Can't apply MakeMethod attribute to $symbol declaration."
}
if ( ! $data ) {
croak "No method type provided for MakeMethod attribute."
}
my $symname = *{$symbol}{NAME};
if ( ref $data eq 'ARRAY' ) {
local $_ = shift @$data;
$symname = [ @$data, $symname ];
$data = $_;
}
unless ( $DefaultMaker{$package} ) {
local $_ = get_vvalue( \%DefaultMaker, $package );
$DefaultMaker{$package} = $_ if ( $_ );
}
Class::MakeMethods->make(
-TargetClass => $package,
-ForceInstall => 1,
( $DefaultMaker{$package} ? ('-MakerClass'=>$DefaultMaker{$package}) : () ),
$data => $symname
);
}
1;
__END__
=head1 NAME
Class::MakeMethods::Attribute - Declare generated subs with attribute syntax
=head1 SYNOPSIS
package MyObject;
use Class::MakeMethods::Attribute 'Standard::Hash';
sub new :MakeMethod('new');
sub foo :MakeMethod('scalar');
sub bar :MakeMethod('scalar', { hashkey => 'bar_data' });
sub debug :MakeMethod('Standard::Global:scalar');
=head1 DESCRIPTION
This package allows common types of methods to be generated via a subroutine attribute declaration. (Available in Perl 5.6 and later.)
Adding the :MakeMethod() attribute to a subroutine declaration causes Class::MakeMethods to create and install a subroutine based on the parameters given to the :MakeMethod attribute.
You can declare a default method-generation class by passing the name of a MakeMethods subclass in the use Class::MakeMethods::Attribute statement. This default method-generation class will also apply as the default to any subclasses declared at compile time. If no default method-generation class is selected, you will need to fully-qualify all method type declarations.
=head1 EXAMPLE
Here's a typical use of Class::MakeMethods::Attribute:
package MyObject;
use Class::MakeMethods::Attribute 'Standard::Hash';
sub new :MakeMethod('new');
sub foo :MakeMethod('scalar');
sub bar :MakeMethod('scalar', { hashkey => 'bar_data' });
sub debug :MakeMethod('Standard::Global:scalar');
package MySubclass;
use base 'MyObject';
sub bazzle :MakeMethod('scalar');
This is equivalent to the following explicit Class::MakeMethods invocations:
package MyObject;
use Class::MakeMethods (
-MakerClass => 'Standard::Hash',
new => 'new',
scalar => 'foo',
scalar => [ 'ba', { hashkey => 'bar_data' } ],
'Standard::Global:scalar' => 'debug',
);
package MySubclass;
use base 'MyObject';
use Class::MakeMethods (
-MakerClass => 'Standard::Hash',
scalar => 'bazzle',
);
=head1 DIAGNOSTICS
The following warnings and errors may be produced when using
Class::MakeMethods::Attribute to generate methods. (Note that this
list does not include run-time messages produced by calling the
generated methods, or the standard messages produced by
Class::MakeMethods.)
=over
=item Can't apply MakeMethod attribute to %s declaration.
You can not use the C<:MakeMethod> attribute with lexical or anonymous subroutine declarations.
=item No method type provided for MakeMethod attribute.
You called C<:MakeMethod()> without the required method-type argument.
=back
=head1 SEE ALSO
See L<Attribute::Handlers> byĆDamian Conway.
See L<Class::MakeMethods> for general information about this distribution.
=cut
|