in reply to Optimise Perl code pl file

For a specific .pl file it would traverse the heirarchy of inherited PMs and produce a PL file with local subroutines copied in. The larger body of code not used in the .pm files would not be there.

I don't know of anything off-hand that would strip out the unused functions for you.

There are a couple of packages around that will merge all of your modules into a single file, including my Devel::PreProcessor. (You can also use it to strip out comment lines and POD sections.)

You can use Devel::Cover to list which of your subroutines are called and which are not, although this depends on you having test scripts or manually running the program several times to exercise all of the possible code paths.

It would be up to you to combine these two capabilities and strip out the unused functions.

Replies are listed 'Best First'.
Re: Re: Optimise Perl code pl file
by Wassercrats (Initiate) on Nov 28, 2003 at 10:26 UTC
    Is Devel::PreProcessor used when compiling Perl to bytecode? I was considering doing that in the future to enable people without Perl to install my scripts, and to obfuscate it, but the following was among the limitations listed for Devel::PreProcessor
    While some pragmas are known to work, including use vars, problems may pop up with others. In particular, use strict and no strict pragmas are removed from the resulting source, because their scoping changes in a single-file context, usually with fatal results.
    That sounds like a major limitation to me.
      Is Devel::PreProcessor used when compiling Perl to bytecode?

      Nope, it's just source-code manipulation; it produces a single file that contains the source of your script and the modules it uses.

      ...the following was among the limitations listed for Devel::PreProcessor: ... use strict and no strict pragmas are removed ...

      Assuming your code already compiles under use strict, there's not much of an impact if you then remove that pragma.

      However, in hindsight the solution to this wasn't very difficult to implement, so I've made this change and released a new version of Devel::PreProcessor to CPAN; it should show up on your local mirror within a day or so.