Thank you, Kordaff.

Your program (after uncommenting use pragmas) produces this output:

this is main_1 this is main_2 this is main_3 This is test.pl

Changing main_1.pm to this

########## main_1.pm ############################# package main::; sub test1{ print "This is test1 in main_1\n"; }
produces this:
main_1.pm did not return a true value at test.pl line 4. BEGIN failed--compilation aborted at test.pl line 4.

This was not surprising, because as its filename extension indicates, main_1.pm was a perl module, not a part of test.pl; thus, it required "1;" at the end of the file, so that it would be evaluated as TRUE. As soon as I appended it there, the error went away.

This approach also does not share the namespace with test.pl. Let's consider this alteration on test.pl:

#!/usr/bin/perl use warnings; use strict; use main_1; use main_2; use main_3; print "This is test.pl\n"; &test1;

We would see the following output.

this is main_2 this is main_3 Undefined subroutine &main::test1 called at test.pl line 8. This is test.pl

In order to correct this problem, we have to do the following alterations in main_1.pm.

########## main_1.pm ############################# package main::main_1; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(&test1); sub test1{ print "This is test1 in main_1\n"; } 1; ##################################################

Note first that &test1 needs to be exported. However, that by itself is not sufficient -- we also have to assign the actual (missing) name of the module as I have done on the first line of the code. For some reason, Perl had been tolerating the lack of proper name, in the earlier versions of this code.

Now, we get a proper output:

this is main_2 this is main_3 This is test.pl This is test1 in main_1

That said, I am not interested in writing the code that needs to be part of the main package into a new module.

I appreciated your suggestions.


In reply to Re^2: How to split main package over multiple files by mmk
in thread How to split main package into multiple files by mmk

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!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • 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, details, 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, summary, 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.