Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Comment on

( #3333=superdoc: print w/ replies, xml ) Need Help??

Update: this approach is not viable unless you accept heavy caveats. See Re^2: A simple import() for those special moments

Update++: this approach is not viable at all - see Re^4: A simple import() for those special moments..

Occasionally I have a small module that is supposed to keep a small handful of symbols around, most of the time for use with utility scripts that are pretty short themselves. Basically, I don't care for the flexibility Exporter gives me.

Even when I want it, I find the module's interface involving settings up several globals and inheriting from Exporter just plain ugly.

After poking around for a while, I ended up with the following import:

package Foo; use vars qw($foo_var %foo_hash @foo_barr); sub foo_bar { 1 } my $exported = qr/^foo_/; sub import { my $caller = caller() . '::'; do { require Carp; Carp::croak("You cannot specify an import list to Foo"); } if @_ > 1; $main::{$caller}->{$_} = $Foo::{$_} for grep /$exported/, keys %Foo::; } 42;

It will simply export any symbol, regardless of its type (function, hash, array etc) whose name matches the pattern in $exported - in this case all the variables declared with vars and the foo_bar function. It doesn't even have to turn off strictures. :)

Is there any reason I should be wary of this?

Update: fixed logic and syntax error per sauoq's post.

Makeshifts last the longest.


In reply to A simple import() for those special moments by Aristotle

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!
  • 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, 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, 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.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others wandering the Monastery: (9)
    As of 2015-07-06 07:53 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









      Results (70 votes), past polls