Eric Wilhelm <[EMAIL PROTECTED]> writes: > 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.
I have experimented with: GetOptions("create|c?create a new archive" => \$create, "color=i{3}(0..255)?color components" => [EMAIL PROTECTED], ... ); The user-friendlyness dropped quickly with the power added. The ultimate solution would be to have individual objects for each option, like I once tried with the (still stillborn) Getopt::Long TNG: my %opt = (); my $p = new Getopt::Long -Config => [qw(noignorecase bundling)], -Linkage => \%opt; $p->add (new Getopt::Long::Option -Name => 'concatenate', -Aliases => ['catenate','A'], -Help => 'append tar files to an archive'); $p->add (new Getopt::Long::Option -Name => 'create', -Aliases => ['c'], -Help => 'create a new archive'); $p->add (new Getopt::Long::IntOption -Name => 'block-size', -Aliases => ['b'], -Help => 'block size of <n>x512 bytes (default <n>=20)'); $p->add (new Getopt::Long::StringOption -Name => 'directory', -Aliases => ['C'], -Help => 'change to directory <dir>'); unless ( $p->parse ) { $p->usage (-indent => 4, -hang => 12, -width => 60, -longprefix => "--", -shortprefix => "-"); } This would produce: --concatenate --catenate -C append tar files to an archive --create -c create a new archive --block-size=<n> -B block size of <n>x512 bytes (default <n>=20) --directory=<dir> -C change to directory <dir> But then you'll want other texts, and empty lines, and so on. Usage: album [options] [ directory ] Album: --info XXX description file, default "info.dat" (if it exists) --title XXX album title, default "Photos" Index: --cols NN number of columns per page, default 4 --rows NN number of rows per page, default 3 --thumbsize NNN the max size of thumbnail images, default 200 --captions XXX f: filename s: size c: description t: tag There's always a next hop... -- Johan