The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

CLI::Helpers - Subroutines for making simple command line scripts

VERSION

version 0.4

SYNOPSIS

Use this module to make writing intelligent command line scripts easier.

#!/usr/bin/env perl
use CLI::Helpers qw(:all);

output({color=>'green'}, "Hello, World!");
verbose({indent=>1,color=>'yellow'}, "Shiny, happy people!");
verbose({level=>2,kv=>1,color=>'red'}, a => 1, b => 2);
debug_var({ c => 3, d => 4});

# Wait for confirmation
die "ABORTING" unless confirm("Are you sure?");

# Ask for a number
my $integer = prompt "Enter an integer:", validate => { "not a number" => sub { /^\d+$/ } }

# Ask for next move
my %menu = (
    north => "Go north.",
    south => "Go south.",
);
my $dir = prompt "Where to, adventurous explorer?", menu => \%menu;

# Ask for a favorite animal
my $favorite = menu("Select your favorite animal:", [qw(dog cat pig fish otter)]);

Running as test.pl:

$ ./test.pl
Hello, World!
$ ./test.pl --verbose
Hello, World!
  Shiny, Happy people!
$ ./test.pl -vv
Hello, World!
  Shiny, Happy people!
  a: 1
  b: 2
$ ./test.pl --debug
Hello, World!
  Shiny, Happy people!
  a: 1
  b: 2
---
c: 3
d: 4

Colors would be automatically enabled based on the user's ~/.gitconfig

OVERVIEW

This module provides a libray of useful functions for constructing simple command line interfaces. It is able to extract information from the environment and your ~/.gitconfig to display data in a reasonable manner.

Using this module adds argument parsing using Getopt::Long to your script. It enables passthrough, so you can still use your own argument parsing routines or Getopt::Long in your script.

FUNCTIONS

def

Not exported by default, returns the setting defined.

git_color_check

Not exported by default. Returns 1 if git is configured to output using color of 0 if color is not enabled.

colorize( $color => 'message to be output' )

Not exported by default. Checks if color is enabled and applies the specified color to the string.

output( \%opts, @messages )

Exported. Takes an optional hash reference and a list of messages to be output.

verbose( \%opts, @messages )

Exported. Takes an optional hash reference of formatting options. Automatically overrides the level paramter to 1 if it's not set.

debug( \%opts, @messages )

Exported. Takes an optional hash reference of formatting options. Does not output anything unless DEBUG is set.

debug_var( \%opts, \%Variable )

Exported. Takes an optional hash reference of formatting options. Does not output anything unless DEBUG is set.

override( variable => 1 )

Exported. Allows a block of code to override the debug or verbose level. This can be used during development to enable/disable the DEBUG/VERBOSE settings.

confirm("prompt")

Exported. Creates a Yes/No Prompt which accepts y/n or yes/no case insensitively but requires one or the other.

Returns 1 for 'yes' and 0 for 'no'

text_input("prompt", validate => { "too short" => sub { length $_ > 10 } })

Exported. Provides a prompt to the user for input. If validate is passed, it should be a hash reference containing keys of error messages and values which are subroutines to validate the input available as $_. If a validator fails, it's error message will be displayed, and the user will be reprompted.

Returns the text that has passed all validators.

Exported. Used to create a menu of options from a list. Can be either a hash or array reference as the second argument. In the case of a hash reference, the values will be displayed as options while the selected key is returned. In the case of an array reference, each element in the list is displayed the selected element will be returned.

Returns selected element (HashRef -> Key, ArrayRef -> The Element)

prompt("Prompt", options )

Exported. Wrapper function with rudimentary mimickery of IO::Prompt(er). Uses:

# Mapping back to confirm();
my $value = prompt "Are you sure?", yn => 1;

# Mapping back to text_input();
my $value = prompt "Enter something:";

# With Validator
my $value = prompt "Enter an integer:", validate => { "not a number" => sub { /^\d+$/ } }

# Pass to menu();
my $value = prompt "Select your favorite animal:", menu => [qw(dog cat pig fish otter)];

EXPORT

This module uses Sub::Exporter for flexible imports, the defaults provided by :all are as follows.

Exported Functions

output  ( \%options, @messages )
verbose ( \%options, @messages )
debug   ( \%options, @messages )
debug_var ( \$var )
override( option => $value )

menu       ( "Question", \%Options or \@Options )
text_input ( "Question", validate => { "error message" => sub { length $_[0] } } )
confirm    ( "Question" )

prompt()    Wrapper which mimicks IO::Prompt a bit

ARGS

From CLI::Helpers:

--color             Boolean, enable/disable color, default use git settings
--verbose           Incremental, increase verbosity
--debug             Show developer output
--quiet             Show no output (for cron)

OUTPUT OPTIONS

Every output function takes an optional HASH reference containing options for that output. The hash may contain the following options:

AUTHOR

Brad Lhotsky brad@divisionbyzero.net

COPYRIGHT AND LICENSE

This software is Copyright (c) 2013 by Brad Lhotsky.

This is free software, licensed under:

The (three-clause) BSD License

SOURCE

The development version is on github at http://https://github.com/reyjrar/CLI-Helpers and may be cloned from git://https://github.com/reyjrar/CLI-Helpers.git