# The following was supposedly scribed by
# [EMAIL PROTECTED]
# on Saturday 26 June 2004 05:31 am:

>Andy mentioned Getopt::Declare. I've briefly taken a look at it a few
>times, and I did so again when he mentioned it. I guess I never really
>"got it". It doesn't seem to solve the problem, but since I've been
>thing about tighter perl/pod integration, it occurs to me that a natural
>extension of Getopt::Decare's functionality would be to have it get its
>specification from pod

It's an interesting functionality, but the trouble with having the options 
come from the pod is that you don't get to make perl do any of the work.

I've taken a crack at this and it seems that maybe its a two-part problem.  
Part one is tying the documentation to the option declaration, while part two 
is dynamically generating the pod (yes, Getopt::Declare skips part two, but 
again,  I'm stubborn and want to make the computer earn its keep.)

This is only partly underway, but feel free to look at the bloody stump of 
code at http://ericwilhelm.homeip.net/svn/Getopt-Helpful/trunk/code/Getopt/

$example = <<'END';
use Getopt::Long;
# this doesn't replace Getopt::Long, just supplements it
use Getopt::Helpful;
my $name;
my $ext = ".dwg";
my $parts = "parts/";
my $force = 0;

my $hopt = Getopt::Helpful->new(
        ['n|name=s', \$name, '<name>',
                "name for new part"],
        ['p|parts=s', \$parts, '<parts dir>',
                "directory containing parts (default $parts)"],
        ['e|ext=s', \$ext, '.<extension>',
                "extension for geometry file (default $ext)"],
        ['f|force',    \$force,   ' ',
                "force overwrite of existing files (default: " .
                        ($force ? "yes" : "no") . ")"],
        );
GetOptions(
        $hopt->opts,
        );
END

The documentation part isn't ready yet, but it would be something like 
$hopt->help_string() and would return a string which joins the 0,2, and 3 
indices of the input data (padding the columns and maybe turning 'f|force' 
into '-f, --force', giving something like:

  -e, --ext     <extension>  extension for geometry file
  -f, --force, --noforce     force overwrite of existing files  (default:  no)

I'm not super happy with the array-reference interface (it assumes a lot and 
lines tend to need a lot of re-wrapping), but it gets everything into one 
place rather than scattered about and allows the variables to tell the user 
their default values (even solving the side-effect  that  Johan  pointed 
out.)  It also allows you to maintain an order, which a hash wouldn't.

Also, I'd welcome suggestions on the name, since Getopt:: doesn't really 
describe the functionality (except that it is related to option getting.)

--Eric
-- 
"Cleanliness is next to impossible."
                                        --Unknown

Reply via email to