Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??
If you do this you will quickly encounter the following problems:
  1. Tracking down where a routine comes from will become difficult.
  2. Scripts will reuse variables and subroutine names unbeknownst to you, and they will collide.
  3. Because of hardcoded paths it will be very hard for you to test any changes without modifying production.
  4. Without a clear division between executable and non-executable code, people are likely to put actions into scripts where they do not belong.
In addition the speed difference between doing the above and doing it right with modules is insignificant if you have ever learned to write modules.

So here is a template for stealing routines from existing code and putting them into a procedural module.

  1. Decide what module the routine belongs in. If the answer is none that you have, start a new module.
  2. To start a new module create a file Foo.pm, and in it type the following template:
    package Foo; use Exporter; @ISA = 'Exporter'; @EXPORT_OK = qw(); use strict; # Your subs will go here. 1;
    The word "Foo" must match the module name (with the usual conversion between the package separator :: and the path /).
  3. Copy the subroutine into the module.
  4. Put the name of the subroutine in the @EXPORT_OK list.
  5. Comment out the original subroutine.
  6. Put use Foo qw(sub_name); back in the original script.
  7. Test. (Often the subroutine will have dependencies that also need to go into the module.)
  8. Roll out.
As for the location of modules, that is what lib is for. I personally have a custom configuration loader that will (among other things) transparently do the right lib invocations for me. In development pick up my copy of stuff in CVS. In production pick up the production copy of the same. The exact layout and development of that kind of functionality is a site decision. (Having this available has made testing and development much easier...)

In reply to Re (tilly) 2: Simpler alternative to modules by tilly
in thread Creating module files from subroutines 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":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (8)
As of 2024-04-19 09:02 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found