Attribute::Protected - implementing proctected methods with attributes
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
Attribute::Protected implements something like public / private / protected methods in C++ or Java.
sub foo : Public { }
just a mark. Can be called from everywhere.
sub _bar : Private { }
Can't be called from outside the class where it was declared.
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!.
foo() is a protected method of Foo!
attributes (public, private and proteced) should be lowercased?
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.
Attribute::Handlers, protect, Class::Fields
To install Attribute::Protected, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Attribute::Protected
CPAN shell
perl -MCPAN -e shell install Attribute::Protected
For more information on module installation, please visit the detailed CPAN module installation guide.