NAME
Getopt::Yath::Option - Base class for options.
DESCRIPTION
This is the base class for option types used in Getopt::Yath.
SYNOPSIS
To create a new type you want to start with this template:
package Getopt::Yath::Option::MyType;
use strict;
use warnings;
# Become a subclass
use parent 'Getopt::Yath::Option';
# Bring in some useful constants;
use Getopt::Yath::HashBase;
# Must define these:
#######
# True if an arg is required
# True means you can do '--flag value'
# Without this you must do '--flag=value' to set a value, otherwise it can
# act like a bool or a counter and not need a value.
sub requires_arg { ... }
sub add_value {
my $self = shift;
my ($ref, $val) = @_;
# $ref contains a scalar ref to where the value is stored
# $val is the value being assigned to the option
# Most types can get away with this:
${$ref} = $val;
}
sub is_populated {
my $self = shift;
my ($ref) = @_;
# $$ref contains the slot where the value would be stored if it was set.
# Most types can get away with this:
return defined(${$ref}) ? 1 : 0;
}
sub no_arg_value {
my $self = shift;
# This only happens if you do not require an arg, and do not require an
# autofill. Only bool nd count types currently do this.
# This is the value that will be used in such cases.
# If you do not meet the conditions for this to be called you can simply remove this method.
...;
}
# May want to define these, otherwise remove them from this file
#######
sub notes { ... } # Return a list of notes to include in documentation
sub allows_arg { ... } # True if an arg is allowed.
sub allows_autofill { ... } # True if autofill is allowed
sub allows_default { ... } # True if defaults are allowed
sub requires_autofill { ... } # True if an auto-fill is allowed
# Change this to true if this option type can set an environment variable
sub can_set_env { 0 }
# You only need this if you can set an environment variable
get_env_value {
my $self = shift;
my ($envname, $ref) = @_;
# For simple scalar values this is usually good enough
# This should be the value to assign to environment variables that are
# set by this option.
return $$ref;
}
sub default_long_examples {
my $self = shift;
...;
return [' ARG', '=ARG']; # If you require an argument
return ['']; # If do not allow arguments
return ['', '=ARG']; # If arguments are optional
}
sub default_short_examples {
my $self = shift;
...;
return [' ARG', '=ARG']; # If you require an argument
return ['']; # If do not allow arguments
return ['', '=ARG']; # If arguments are optional
}
# Run right after the initial value for this option is set. Other options
# may not have their initial values yet.
sub init_settings {
my $self = shift;
my ($state, $settings, $group, $ref) = @_;
...
}
# Run after all the options have been set, parsed, and post-blocks have
# been run.
# This is run before the environment variable for this option has been set,
# but other options may have had theirs set.
sub finalize_settings {
my $self = shift;
my ($state, $settings, $group, $ref) = @_;
...
}
# Probably should not define these, but here for reference.
# Remove these if you do not plan to override them
# The base class implementations work for most types.
#######
sub clear_field { ... } # Used to clear the field
sub get_autofill_value { ... } # Used to get the autofill value
sub get_default_value { ... } # Used to get the default value
1;
METHODS
CONSTRUCTION
- $option = Getopt::Yath::Option->create(type => $type, %spec)
-
Factory method that creates an option of the appropriate subclass.
$typecan be a short name like'Bool'(resolved toGetopt::Yath::Option::Bool), a fully qualified class name, or a+-prefixed class name for types outside theGetopt::Yath::Option::namespace.
INTROSPECTION
- $string = $option->trace_string()
-
Returns a human-readable string like
"Foo.pm line 42"for error messages. - $forms = $option->forms()
-
Returns a hashref mapping all recognized command-line forms to their delta values. Positive delta (1) means the option sets a value, negative (-1) means it clears (the
--no-prefix forms). - @args = $option->long_args()
-
Returns the primary name and all alternate names for this option.
- $bool = $option->is_applicable($instance, $settings)
-
Returns true if this option should be active given the current state. Calls the
applicablecoderef if one was provided, otherwise returns true.
VALUE HANDLING
These methods are typically overridden by subclasses:
- $bool = $option->requires_arg()
-
Must return true if the option requires an argument (e.g.,
--opt VALUE). - $option->add_value($ref, @values)
-
Store the given values into the scalar reference
$ref. How values are stored depends on the option type. - $bool = $option->is_populated($ref)
-
Return true if
$$refcontains a meaningful value (i.e., the option has been set). - @val = $option->no_arg_value($settings)
-
Return the value to use when the option is specified without an argument and without autofill. Only relevant for types like Bool and Count.
- @val = $option->get_env_value($env_name, $ref)
-
Return the value to write to the named environment variable. Only needed when
can_set_envreturns true. - @val = $option->normalize_value(@input)
-
Pass values through the
normalizecallback if one was provided. - @bad = $option->check_value(\@values)
-
Check values against
allowed_valuesif defined. Returns a list of values that failed validation. - $option->clear_field($ref)
-
Reset the option to its cleared state via
get_clear_value. - $option->trigger(%params)
-
Invoke the
triggercallback if one was provided.
DEFAULTS AND INITIALIZATION
- $val = $option->get_initial_value($settings)
-
Returns the initial value for the option, checking
from_env_varsfirst, then falling back to theinitializeattribute. - @val = $option->get_default_value($settings)
-
Returns the default value from the
defaultattribute. - @val = $option->get_autofill_value($settings)
-
Returns the autofill value from the
autofillattribute. - $val = $option->get_clear_value()
-
Returns the value to use when the option is cleared (via
--no-opt).
DOCUMENTATION
- ($forms, $no_forms) = $option->doc_forms(%params)
-
Returns two arrayrefs: one of the positive forms (e.g.,
--verbose,-v ARG) and one of the negative forms (e.g.,--no-verbose). Used by the documentation generators. - $text = $option->cli_docs(%params)
-
Generate CLI help text for this option, including forms, description, environment variable notes, and allowed values.
- $text = $option->pod_docs(%params)
-
Generate POD documentation for this option.
- @examples = $option->long_examples(%params)
- @examples = $option->short_examples(%params)
-
Return the example suffixes used in documentation (e.g.,
' ARG','=ARG'). Uses custom examples if provided, otherwise falls back todefault_long_examplesordefault_short_examples.
HOOKS
- $option->init_settings($state, $settings, $group, $ref)
-
Called right after the initial value is set for each option. Other options may not have their initial values yet. Override in subclasses for early setup.
- $option->finalize_settings($state, $settings, $group, $ref)
-
Called after all options have been parsed and post-processors have run, but before environment variables are set. Override in subclasses for late adjustments.
EXAMPLES
See the following modules source for examples:
- Getopt::Yath::Option::Scalar
- Getopt::Yath::Option::Bool
- Getopt::Yath::Option::Count
- Getopt::Yath::Option::List
- Getopt::Yath::Option::Map
- Getopt::Yath::Option::Auto
- Getopt::Yath::Option::AutoList
- Getopt::Yath::Option::AutoMap
- Getopt::Yath::Option::BoolMap
- Getopt::Yath::Option::PathList
- Getopt::Yath::Option::AutoPathList
SOURCE
The source code repository for Getopt-Yath can be found at http://github.com/Test-More/Getopt-Yath/.
MAINTAINERS
AUTHORS
COPYRIGHT
Copyright Chad Granum <exodist7@gmail.com>.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.