NAME
protect - allows the declaration of protected subs
SYNOPSIS
package FooPackage;
use protect;
members qw ( Bar Baz );
sub foo {
is private;
print "Only FooPackage can use me\n";
}
sub foz {
is member;
print "Only packages FooPackage, Bar, and Baz can use me.\n";
}
sub fail {
is public;
print "Anybody can use me!\n";
}
DESCRIPTION
This module allows you to C<protect> your subs from outside callers, in a
way similar to C++ or Java. You can declare member subs, private subs, or
public subs.
The truth is, unfortunatly, that the subs aren't actually being declared,
public, member, or private. What actually happens is a juicy bit of runtime
checking, with perl's C<caller()> function to see where the subroutine call is
coming from.
FUNCTION is
C<is> is allows you to declare set the subroutine as one of three modes.
MODES
The following are all modes that can be set by using the is function.
- MODE private
-
By setting your subroutine as C<private>, no-one can call it from outside the package that it was declared in. Doing so will cause the program to die.
- MODE member
-
By setting the C<member> mode, only the current package and those packages that are declared as C<members> of the current package are allowed to call the subroutine.
- MODE public
-
By declaring C<public> you are actually doing nothing at all, but it looks nice to declare a function public, when every other sub is declared something or other.
FUNCTION members
C<members> allows you to declare members of the current package family,
and therefore use subroutines declared as member. members'ing is one way
only. ie 'Just because you lent me your basketball, doesn't mean I'll lend
you mine'.
FUNCTION nowarn
C<nowarn> allows you to have protect simply die without explaining why it
did so. This is in order to help restrict attacks where it is possible for
people to see the runtime errors generated by the script.
BUGS
C<private> and C<member> methods/functions can still be redefined without
the private/member attribute.
Both private and member methods/functions can be called by simply entering
the package that they were declared in.
FIXES
C<protect> now exports a lot less into the namespace, thanks to the
wonders of C<is>.
C<members> and C<member> functions now work like they should.
AUTHOR
James Duncan <jduncan@hawk.igs.net>
SEE ALSO
perl(1), perlfunc(1)
2 POD Errors
The following errors were encountered while parsing the POD:
- Around line 133:
'=item' outside of any '=over'
- Around line 151:
You forgot a '=back' before '=head1'