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 <miyagawa@bulknews.net>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.