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
produces this:########## main_1.pm ############################# package main::; sub test1{ print "This is test1 in main_1\n"; }
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
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |