Skip to content

Ovid/getopt-type-tiny

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NAME

Getopt::Type::Tiny - Clean Getopt::Long wrapper with Type::Tiny support

VERSION

version 0.03

SYNOPSIS

use Getopt::Type::Tiny qw(get_opts Str Int);
my %opts = get_opts(
    foo => { isa => Str },
    bar => { isa => Int, default => 42 },
    'verbose|v', # defaults to Bool
);

# %opts now contains the parsed options:
# (
#    foo     => 'value of foo',
#    bar     => 42,
#    verbose => 1,
# )    

DESCRIPTION

This module is a thin wrapper around Getopt::Long that adds support for Type::Tiny type constraints. It is intended to be a clean and simple way to parse command line options with type constraints.

FUNCTIONS

get_opts

my %opts = get_opts(
    foo => { isa => Str },
    bar => { isa => Int, default => 42 },
    'verbose|v', # defaults to Bool
);

Parses the command line options and returns a hash of the parsed options. The arguments to get_opts are a list of option specifications.

OPTION SPECIFICATIONS

Option specifications are passed to get_opts as a list of key/value pairs. If no option spec is passed, the option is assumed to be a boolean option:

my %options = get_opts( qw/
  dryrun
  enabled
  verbose
/ );
  • isa

    The isa key specifies the type constraint for the option. This can be any Types::Standard, Types::Common::Numeric, or Types::Common::String type. If more complex types are needed, you can create your own type constraints with Type::Tiny.

  • coerce

    The coerce key enables type coercions, if the type indicated by isa supports coercions.

  • default

    The default key specifies the default value for the option. If the option is not present on the command line, this value will be used.

  • rename

    The rename key specifies a new name for the option. The value of the option will be stored in the hash under this new name.

  • required

    The required key specifies that the option is required. If the option is not present on the command line, an error will be thrown.

HELP OPTIONS

By default, get_opts will add a --help|? and man options that use Pod::Usage to display the usage message and exit. The --help and -? options will display a brief usage message and exit. The --man option will display the full documentation and exit.

MULTI-VALUE OPTIONS

Multi-value options (arrays and hashes) are automatically detected from ArrayRef and HashRef types:

my %opts = get_opts(
    servers => { isa => ArrayRef[Str] },    # --servers=a --servers=b
    config  => { isa => HashRef[Int] },     # --config=k1=1 --config=k2=2
);

Supported Types

The following type mappings are supported:

ArrayRef[Str]  => =s@    ArrayRef[Int]  => =i@    ArrayRef[Num]  => =f@
HashRef[Str]   => =s%    HashRef[Int]   => =i%    HashRef[Num]   => =f%

Subtypes are also supported (e.g., ArrayRef[PositiveInt] maps to =i@). ArrayRef[Any] and HashRef[Any] map to string modifiers.

Auto-Defaults

ArrayRef types default to [] and HashRef types default to {} when no default is specified. You can override this with an explicit default or use required => 1.

Explicit Syntax

You can still use explicit Getopt::Long syntax if needed:

'servers=s@' => { isa => ArrayRef[Str] }

If the explicit syntax differs from what would be inferred, a warning is issued. Use nowarn => 1 to suppress it:

'servers=s@' => { isa => ArrayRef[Int], nowarn => 1 }

AUTHOR

Curtis "Ovid" Poe curtis.poe@gmail.com

COPYRIGHT AND LICENSE

This software is Copyright (c) 2025 by Curtis "Ovid" Poe.

This is free software, licensed under:

The Artistic License 2.0 (GPL Compatible)

About

Clean Getopt::Long wrapper with Type::Tiny support

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages