Definitely go for the module approach. Though not that short as I would prefer, the code below demonstrate how you could achieve the effect of "automatically" stuffing your constants into the list of exports of your module.

The code for finding the constant names in the symbol table is almost abstract and with a little effort could be migrated into a generic module, leaving your constant module lighter.

package MyConstants; use strict; use warnings; require Exporter; # you may use other exporter modules our @EXPORT; # empty by now use constant FOO => 1; use constant BOO => 2; use constant BAR => 3; # ... #### here begins the code to find and populate the list of exports wit +h constant names our @GLOBAL_SYMBOLS; # these are not package constants, but Perl artif +acts BEGIN { @GLOBAL_SYMBOLS = qw(BEGIN EXPORT); } # $ans = is_constant($symbol_name); # # decides if a name is a package constant or not. # Checks if it is all upper-case and not in @GLOBAL_SYMBOLS sub is_constant { my $k = shift; return $k =~ /^[A-Z]+$/ && !grep { $_ eq $k } @GLOBAL_SYMBOLS } # push_constants(\@export, @symbols) # # Push @symbol names into @export if they satisfy is_constant sub push_constants { my $export_ref = shift; my @symbols = @_; for my $s (@_) { if ( is_constant($s) ) { #print "s: $s\n"; push @$export_ref, $s } } } BEGIN { # iterate the package stash my @keys = do { no strict 'refs'; keys %{__PACKAGE__ . '::'} }; push_constants(\@EXPORT, @keys); } print "export: @EXPORT\n"; #### here ends the code to find and populate the list of exports with +constant names 1;

In reply to Re: sharing symbols by ferreira
in thread sharing symbols by mungohill

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.