Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Re: Re: Re: Re: Command line tool coding style?

by perrin (Chancellor)
on Jan 16, 2002 at 23:10 UTC ( [id://139287]=note: print w/replies, xml ) Need Help??


in reply to Re^4: Command line tool coding style?
in thread Command line tool coding style?

I'd suggest moving the "use Getopt::Long" to the top part, since that's where you actually use the module, and giving the lower section a real package name ("package MyTool" or something). Then instead of this:
my $handler = can main "_$action";
you can have this: this:
my $handler = MyTool->can("_$action");
Easier to follow, in my opinion.

Incidentally, a nice way to code tools like this is to make a separate module that implements all of the real logic, and then a CLI wrapper that just calls that module's methods. Then you can easilly add a GUI, call it from CGI, etc.

Replies are listed 'Best First'.
Re^6: Command line tool coding style?
by Aristotle (Chancellor) on Jan 17, 2002 at 02:40 UTC

    Ops, forgot to move the Getopt::Long when I restructured the code - of course it belongs at the top.

    Good point about the extra package as well - I had a package Logic; and package Utils; at first, but it made the code in Logic awfully bulky if I didn't import all the utility functions. Now that I have a naming convention for the handlers it is quite effortlessly possible to use a package once again - handlers and utility functions can be distinguished quite easily. What's left in main is just the initialization skeleton then.

    I'm well aware of the points to be made for proper modularization (I tend to modularize too much actually - one of them hubris people is me, not a lazy one).

    It is obviously necessary to always remember under which premises one took certain decisions and to go back and reassert them as one simplifies one's code. Thanks for helping me find the proper way. :-)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://139287]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (6)
As of 2024-04-24 09:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found