NAME
Attribute::Protected - implementing proctected methods with attributes
SYNOPSIS
package SomeClass;
use Attribute::Protected;
sub foo : Public { }
sub _bar : Private { }
sub _baz : Protected { }
sub another {
my $self = shift;
$self->foo; # OK
$self->_bar; # OK
$self->_baz; # OK
}
package DerivedClass;
@DerivedClass::ISA = qw(SomeClass);
sub yetanother {
my $self = shift;
$self->foo; # OK
$self->_bar; # NG: private method
$self->_baz; # OK
}
package main;
my $some = SomeClass->new;
$some->foo; # OK
$some->_bar; # NG: private method
$some->_baz; # NG: protected method
DESCRIPTION
Attribute::Protected implements something like public / private /
protected methods in C++ or Java.
ATTRIBUTES
Public
sub foo : Public { }
just a mark. Can be called from everywhere.
Private
sub _bar : Private { }
Can't be called from outside the class where it was declared.
Protected
sub _baz : Protected { }
Can be called from the class where it was declared or its derived
classes.
When called from inappropriate classes, those methods throw an exception
like "foo() is a protected method of Foo!".
THOUGHT
* attributes (public, private and proteced) should be lowercased?
AUTHOR
Tatsuhiko Miyagawa <
[email protected]>
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
SEE ALSO
the Attribute::Handlers manpage, the Protect manpage, the Class::Fields
manpage