Class::Fields::Attribs - Attribute constants for use with data members


Class-Fields documentation Contained in the Class-Fields distribution.

Index


Code Index:

NAME

Top

  Class::Fields::Attribs - Attribute constants for use with data members




SYNOPSIS

Top

  # Export the attribute constants
  use Class::Fields::Attribs;




DESCRIPTION

Top

Simply exports a set of constants used for low level work on data members. Each constant is a bitmask used to represent the type of a data member (as in Public, Private, etc...).

The exported attributes are:

PUBLIC
PRIVATE
PROTECTED
INHERITED

Each of these constants is a bitmask representing a possible setting of a field attribute. They can be combined by using a bitwise OR and attributes can be checked for using a bitwise AND. For example:

    # Indicate a piece of data which is both public and inherited.
    $attrib = PUBLIC | INHERITED;

    # Check to see if an attribute is protected.
    print "Protected" if $attrib & PROTECTED;

It is rare that one has to use these constants and it is generally better to use the functions provided by Class::Fields.

AUTHOR

Top

Michael G Schwern <schwern@pobox.com>

SEE ALSO

Top

Class::Fields


Class-Fields documentation Contained in the Class-Fields distribution.

package Class::Fields::Attribs;

use strict;

use vars qw( @EXPORT @ISA $VERSION );
@EXPORT = qw(PUBLIC PRIVATE INHERITED PROTECTED);
require Exporter;
@ISA = qw(Exporter);
$VERSION = '0.03';

# Inheritance constants.
# Its too bad I can't use 0bXXX since its 5.6 only.
use constant PUBLIC     => 2**0;    # Open to the public, will be inherited.
use constant PRIVATE    => 2**1;    # Not to be used by anyone but that class, 
                                    # will not be inherited
use constant INHERITED  => 2**2;    # This member was inherited
use constant PROTECTED  => 2**3;    # Not to be used by anyone but that class 
                                    # and its subclasses, will be inherited.

# For backwards compatibility.
# constant.pm doesn't like leading underscores.  Damn.
sub _PUBLIC     () { PUBLIC     }
sub _PRIVATE    () { PRIVATE    }
sub _INHERITED  () { INHERITED  }
sub _PROTECTED  () { PROTECTED  }

return 'FIRE!';

__END__