The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


  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


Public member.

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 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. serves a subset of the functionality of

  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 (Note: This is considered unwise and will scream about it if you have Perl's warnings on.)

Additionally, 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 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 <>


private, protected, fields, base, Class::Fields