Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re: Splitting program into modules

by Anonymous Monk
on Nov 12, 2018 at 11:53 UTC ( [id://1225627]=note: print w/replies, xml ) Need Help??


in reply to Splitting program into modules

what am i missing here? How do properly split this code into logical chunks of separate files, but keeping namespace "main"?

There's nothing particularly "proper" about splitting the code into separate files. You keep things in main by writing subroutines, not by fragmenting the codebase and then struggling to unify it. One program should be one file, unless the "parts" are truly going to be reused by other programs (which they usually are not).

Replies are listed 'Best First'.
Re^2: Splitting program into modules
by eyepopslikeamosquito (Archbishop) on Nov 12, 2018 at 20:51 UTC

    One program should be one file, unless the "parts" are truly going to be reused by other programs (which they usually are not)

    I hope you're not recommending 14,000 lines of main program in a single file! On the contrary, I recommend keeping the main program file short, with most of the work done in (highly cohesive, loosely coupled) modules -- with documentation and a test suite around each module.

    You can find many examples of this approach on the CPAN. For example, in Perl::Tidy and Perl::Critic, the perltidy and perlcritic main programs are not much more than one-liners, essentially just:

    use Perl::Tidy; Perl::Tidy::perltidy();
    and:
    use Perl::Critic::Command qw< run >; run();
    with all the work being done in (well-documented) modules with test suites around each module.

      I hope you're not recommending 14,000 lines of main program in a single file!

      I prefer writing, and hacking on, single file programs. It's much easier than remembering which module contains what code that's performing some action from a distance. I like to keep as much code as possible in the main program file. That being said, I also use plenty of modules, impose sane order on the source to ease navigation, and document everything.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (4)
As of 2024-04-25 14:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found