You should read Copy using Scoping "MJD.
perldoc perlmod will also be useful to read.
The code comes out of this world ugly. It tramples on all kinds of namespaces without concern in the world just because the author seems to think that $ author :: email is cool.
It would be best to use a hash:
my %author = ( email => ' author@example.com ', ... );
Tumbling throughout the character table is not required.
I have some examples of Win32::OLE : http://www.unur.com/comp/ which are not works of art, but I believe that the improvements are in this style. See also Why the number of pages in a Word document is different Perl and Word VBA?
I'm going to tell a little:
@pgm::runtime_args = @ARGV ;
So, we are abandoning the standard @ARGV array to trample the pgm namespace. Not only that, every Perl programmer knows what @ARGV . Anyway, @pgm::runtime_args not used again in the script.
$pgm::maxargs = $#pgm::runtime_args + 1 ;
Of course, @pgm::runtime_args in a scalar context will give us the number of elements in this array. I have no idea why $pgm::maxargs might be needed, but if so, then this line should have been:
$pgm::maxargs = @pgm::runtime_args;
I do not quote this material anymore. This is probably what happens when Cobol programmers try to write Perl.
$program::copyright = "Copyright (c) 02002 - Kenneth Tomiak : All rights reserved.";
I am glad that he allocated five figures for the year. I never know!
PS: I believe my excerpts are fair use.