Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re^2: Writing Modules/namespace polution

by nobull (Friar)
on Mar 16, 2005 at 18:05 UTC ( #440068=note: print w/replies, xml ) Need Help??

in reply to Re: Writing Modules/namespace polution
in thread Writing Modules/namespace polution

I believe you should "use Exporter" not "require Exporter"

I believe you should "require Exporter" or "use base 'Exporter'" not "use Exporter".

The exporter module defines &Exporter::import so that it can be inheritied by other modules. Calling Exporter::import('Exporter') doesn't really make sense.

  • Comment on Re^2: Writing Modules/namespace polution

Replies are listed 'Best First'.
Re^3: Writing Modules/namespace polution
by dragonchild (Archbishop) on Mar 16, 2005 at 18:13 UTC
    Doing a "use Exporter;" will not do anything different than a "require Exporter;" because the import() function in Exporter doesn't do anything because Exporter doesn't define @EXPORT or @EXPORT_OK.

    The only difference between "use base Exporter;" and either "use Exporter;" or "require Exporter;" is that "use base" will modify @ISA for you and the others make you modify it yourself. You either have to have Exporter in your @ISA or have done something like *import = \&Exporter::import; to get the benefits of Exporter.

    Nothing more, nothing less.

    Being right, does not endow the right to be rude; politeness costs nothing.
    Being unknowing, is not the same as being stupid.
    Expressing a contrary opinion, whether to the individual or the group, is more often a sign of deeper thought than of cantankerous belligerence.
    Do not mistake your goals as the only goals; your opinion as the only opinion; your confidence as correctness. Saying you know better is not the same as explaining you know better.

Re^3: Writing Modules/namespace polution
by chas (Priest) on Mar 16, 2005 at 18:26 UTC
    Well, I just checked in the Camel books. The 3rd edition does indicate "require Exporter;" in modules, but the 2nd edition (which I learned from) has "use Exporter;" in modules in most of the examples (although there was a "require Exporter;" in an example.) Randal Schwartz's book "Learning Perl Objects, References & Modules" says "...As a module author, all you do is add:
    use Exporter; our @ISA = qw(Exporter);
    I just made a module skeleton using h2xs, and "require Exporter;" appears in the module file. So maybe either will suffice..I'll go with the "require" form since that's what h2xs produced.
    (Update: Hadn't seen Dragonchild's reply yet - that seems to settle the difference. Fixed typo.)

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://440068]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (1)
As of 2021-08-04 05:33 GMT
Find Nodes?
    Voting Booth?
    My primary motivation for participating at PerlMonks is: (Choices in context)

    Results (41 votes). Check out past polls.