Cmdline.pm

A minimal, zero-dependency command-line parser in pure Perl – supporting both short and long options.

Perl License

Features

All this in ~120 lines of pure Perl. No dependencies.

Installation

perl Makefile.PL
make
make test
make install

Usage

#!/usr/bin/perl
use strict;
use warnings;
use Cmdline qw(parse);

my $switches = '-v -h --verbose --quiet --help';
my $options  = '-f --file --output --header';

my %opt = (
    header  => [],          # collect multiple values
    output  => 'default.out',
    h => 5,
);

Cmdline::parse(\%opt, $switches, $options)
    or die "Invalid option or missing argument: @ARGV\n";

# @ARGV now contains only positional arguments
print "Verbose level: $opt{verbose}\n";
print "Output file: $opt{output}\n";
print "Headers: @{$opt{header}}\n" if @{ $opt{header} };

Examples

$ script.pl -vh --output=out.txt data.txt
# → v=1, h=1, output='out.txt', @ARGV = ('data.txt')

$ script.pl --verbose --verbose --header=title.txt
# → verbose=2, header => ['title.txt']

$ script.pl -f file1.txt -f=file2.txt
# → file => 'file2.txt' (scalar) or ['file1.txt','file2.txt'] if pre-set as []

$ script.pl --unknown
# → dies with error, @ARGV fully restored

$ script.pl --header title.txt -- --
# → header => ['title.txt'], everything after -- left in @ARGV

API

Cmdline::parse(\%hash, $switches_string, $options_string)

Returns 1 on success, 0 on error.

Development & Testing

The distribution includes a comprehensive test suite:

t/01-basic.t  # tests covering all features and edge cases

Run with:

prove -v t/01-basic.t

License

This module is free software. You can redistribute it and/or modify it under the same terms as Perl itself.

See the official Perl licensing terms: https://dev.perl.org/licenses/