in reply to Re^2: Selective Optimization
in thread Selective Optimization

Can you at least explain a little more clearly what the subroutines are doing? "a couple called as command line arguments that simply print data to the screen and exit" doesn't tell me much. How long does it take to run? How much time do you want to trim?

If what you need to do is speed up specific subroutines, have you looked for any code that can be pulled out of sub? Are you opening/creating/etc some resource that could be held open to remove that step?

Optimization questions are pretty hard to deal with unless you have at least some idea of the problem.

Replies are listed 'Best First'.
Re^4: Selective Optimization
by starX (Chaplain) on Dec 18, 2007 at 21:48 UTC
    Surely. I don't think there's any problems in sharing the help menus:
    sub help { # print basic help menu and exit. print "vpimport\n"; print "version $VERSION\n"; print "Format vendor price files for import to InOrder.\n\n"; print "Usage: vpimport [--vendor <VENDOR>] [--pricefile <file>] " . "[--outfile <file>] [--pricesource <name>] [--live] " . "[--no-create] [--help].\n"; print "--vendor <VENDOR> The vendor code of the vendor to update +.\n"; print "--pricefile <file> The name of the vendor's price file.\n" +; print "--pricesource <name> The price source to add/update.\n"; print "--live Use InOrder_Live instead of " . "InOrder_Development\n"; print "--no-create Don't create new inventory/vendor items +.\n"; print "--help Print this help and exit.\n"; print "--version Print version and exit.\n"; exit(0); }
    sub version { #print version number and exit print "$VERSION\n"; exit(0); }
    These are called via command line options (I'm using Getopt::Long) in the following code:
    my $result = GetOptions ( "version" => \&version, # print version and exit. "help" => \&help, # print basic help and exit. "vendor=s" => \$vendor, # The vendor code to update for. "pricefile=s" => \$pFile, # The vendor price file we're reading. "pricesource=s" => \$pSource, # name of the new price list, "live" => \$useLive, # Are we using the live database? "no-create" => \$no_create, # Don't create new items. );
      So you're wanting to optimize subroutines that only print text to the screen, and nothing else? Are you sure you read Optimizing existing Perl code (in practise) (the thread you linked earlier)? (jeffa) Re: Optimizing existing Perl code (in practise) seems to be particularly applicable. The time you'll spend on this would almost certainly be better spent finding ways to make your code more maintainable, better commented, etc.

      That said...
      Perhaps you could combine all of your data to be printed into a single scalar...this could possibly improve your help sub a bit...since you would only be calling into print a single time...

        No. I'm wanting to optimize the application so that subs that only print text to the screen don't take half the standard execution time to run. Are you sure you read the entire thread?

        I don't particularly need it to be more maintainable, especially those bits. Then again, I don't particularly need it to run faster either. If the installer has to wait a half minute to check the version number of an already installed copy, I'm not going to sweat it, but if it makes sense for it to not have to, great.