You could, of course, put the lexical variables into the symbol table. Exporter doesn't do this, and I'm still even mostly sure that it's better that way.

Some code (and it demonstrates how import() works, too):

In test.pl:

use MyTest; print "Once-lexical variable holds $lexvar\n";

In MyTest.pm:

package MyTest; my $lexvar = 7; # This function is called automatically whenever # anyone 'use's (or 'require's, I'm pretty sure) # our module. Note that this happens at COMPILE TIME. sub import { # symbol table manipulation usually requires # the use of symbolic references... no strict 'refs'; # Figure out where to export to. # Check `perldoc -f caller` for info on caller. my $pkg_to_export_to = (caller)[0]; # Make the scalar part of the entry in the symbol # table of the calling package for 'lexvar' into a hard # reference to our lexical variable. This is called # typeglob aliasing. *{$pkg_to_export_to . '::lexvar'} = \$lexvar; }

Okay, maybe I'm just sick. ;-)

bbfu
Seasons don't fear The Reaper.
Nor do the wind, the sun, and the rain.
We can be like they are.


In reply to (bbfu) (just to confuse the issue) Re(2): use strict and exporting package variables by bbfu
in thread use strict and exporting package variables by Anonymous Monk

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.