http://www.perlmonks.org?node_id=1225627


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 (Bishop) 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.