public - Add public data members to Perl classes
package GI::Joe; use public qw( Name Rank Serial_Number ); # see the protected man page for an example of use
Externally visible data or functionality. An attribute or method that is directly accessable from scopes outside the class. In Perl, most members are, by their standard semantics, public. By convention, attributes of Perl classes are regarded as private, as are methods whose names begin with an underscore.
From "Object Oriented Perl" by Damian Conway
public.pm adds a list of keys as public data members to the current class. This is useful when using pseudo-hashes as objects, or for simply imposing a bit more structure on your Perl objects than is normally expected. It allows you to use the methods provided in Class::Fields.
Public data members are those pieces of data which are expected to be regularly accessed by methods, functions and programs outside the class which owns them. They are also inherited by any subclasses.
public.pm serves a subset of the functionality of fields.pm.
use public qw(Foo);
is almost exactly the same as:
use fields qw(Foo);
with the exception that you can (if you REALLY want to) do something like this:
use public qw(_Foo);
Whereas one cannot do this with fields.pm. (Note: This is considered unwise and public.pm will scream about it if you have Perl's warnings on.)
Additionally, public.pm is a bit clearer in its intent and is not necessarily implying use of pseudo-hashes.
See "SYNOPSIS" in protected for an example of use.
I fully expect public.pm to eventually mutate into a real pragma someday when a better formalized OO data system for Perl supplants the current fledgling pseudo-hashes.
Michae G Schwern <email@example.com>