Package::Constants - List all constants declared in a package


Package-Constants documentation Contained in the Package-Constants distribution.

Index


Code Index:

NAME

Top

Package::Constants - List all constants declared in a package

SYNOPSIS

Top

    use Package::Constants;

    ### list the names of all constants in a given package;
    @const = Package::Constants->list( __PACKAGE__ );
    @const = Package::Constants->list( 'main' );

    ### enable debugging output
    $Package::Constants::DEBUG = 1;

DESCRIPTION

Top

Package::Constants lists all the constants defined in a certain package. This can be useful for, among others, setting up an autogenerated @EXPORT/@EXPORT_OK for a Constants.pm file.

CLASS METHODS

Top

@const = Package::Constants->list( PACKAGE_NAME );

Lists the names of all the constants defined in the provided package.

GLOBAL VARIABLES

Top

$Package::Constants::DEBUG

When set to true, prints out debug information to STDERR about the package it is inspecting. Helps to identify issues when the results are not as you expect.

Defaults to false.

BUG REPORTS

Top

Please report bugs or other issues to <bug-package-constants@rt.cpan.org<gt>.

AUTHOR

Top

This module by Jos Boumans <kane@cpan.org>.

COPYRIGHT

Top


Package-Constants documentation Contained in the Package-Constants distribution.
package Package::Constants;

use strict;
use vars qw[$VERSION $DEBUG];

$VERSION    = '0.02';
$DEBUG      = 0;

sub list {
    my $class = shift;
    my $pkg   = shift;
    return unless defined $pkg; # some joker might use '0' as a pkg...
    
    _debug("Inspecting package '$pkg'");
    
    my @rv;
    {   no strict 'refs';
        my $stash = $pkg . '::';

        for my $name (sort keys %$stash ) {
        
            _debug( "   Checking stash entry '$name'" );
            
            ### is it a subentry?
            my $sub = $pkg->can( $name );
            next unless defined $sub;
                
            _debug( "       '$name' is a coderef" );
            
            next unless defined prototype($sub) and 
                     not length prototype($sub);

            _debug( "       '$name' is a constant" );
            push @rv, $name;
        }
    }
    
    return sort @rv;
}

sub _debug { warn "@_\n" if $DEBUG; }

1;

# Local variables:
# c-indentation-style: bsd
# c-basic-offset: 4
# indent-tabs-mode: nil
# End:
# vim: expandtab shiftwidth=4: