#!/usr/bin/env perl

# ABSTRACT: Command line interface for dice rolls
# PODNAME: roll

use 5.010;
use strict;
use warnings;

use Games::Dice qw(roll);

if ( @ARGV ) {
    for ( @ARGV ) {
        if ( ! -f $_ ) {
            do_roll($_);
        }
        else {
            open my $f, "<", $_;
            while ( <$f> ) {
                do_roll(chomp);
            }
        }
    }
}
else {
    while (<STDIN>) {
        do_roll(chomp);
    }
}

sub do_roll {
    say "$_: " . roll("$_");
}

=pod

=encoding UTF-8

=head1 NAME

roll - Command line interface for dice rolls

=head1 VERSION

version 0.046

=head1 SYNOPSIS

    # Evaluate these command line params
    roll 3d6 2d8

    echo "5d6" > f
    echo "2d4+1" >> f

    # Read the contents of 'f' from STDIN
    roll < f

    # Evaluate 1d100 and open file 'f'
    roll d% f

=head1 OVERVIEW

This is a command line interface to the L<Games::Dice> library. It takes
die rolling specifications in the form of I<a>dI<b>[+-*/b]I<c>. 

(This specification may change a bit over time, but not radically.)

=over

=item *

I<a> is optional and defaults to 1; this is number of dice to roll. 

=item * 

I<b> is the number of sides on each die. '%' is shorthand for 100. 

=back

The optional end modifies the sum of the rolls. 'b' means take the 
"best" I<c> rolls and sum them. Also '/' truncates the result to
an integer after division.

Dice specifications can be piped in, given on STDIN or as positional 
parameters from the command line.

If a positional parameter matches a file name, it will be opened and 
each line of the file evaluated.

=head1 PERL VERSION

This module should work on any version of perl still receiving updates from
the Perl 5 Porters.  This means it should work on any version of perl released
in the last two to three years.  (That is, if the most recently released
version is v5.40, then this module should work on both v5.40 and v5.38.)

Although it may work on older versions of perl, no guarantee is made that the
minimum required version will not be increased.  The version may be increased
for any reason, and there is no promise that patches will be accepted to lower
the minimum required perl.

=head1 AUTHORS

=over 4

=item *

Philip Newton <pne@cpan.org>

=item *

Ricardo Signes <cpan@semiotic.systems>

=back

=head1 COPYRIGHT AND LICENSE

This software is Copyright (c) 1999 by Philip Newton.

This is free software, licensed under:

  The MIT (X11) License

=cut

__END__

#pod =head1 SYNOPSIS
#pod
#pod     # Evaluate these command line params
#pod     roll 3d6 2d8
#pod
#pod     echo "5d6" > f
#pod     echo "2d4+1" >> f
#pod
#pod     # Read the contents of 'f' from STDIN
#pod     roll < f
#pod
#pod     # Evaluate 1d100 and open file 'f'
#pod     roll d% f
#pod
#pod =head1 OVERVIEW
#pod
#pod This is a command line interface to the L<Games::Dice> library. It takes
#pod die rolling specifications in the form of I<a>dI<b>[+-*/b]I<c>. 
#pod
#pod (This specification may change a bit over time, but not radically.)
#pod
#pod =over
#pod
#pod =item *
#pod
#pod I<a> is optional and defaults to 1; this is number of dice to roll. 
#pod
#pod =item * 
#pod
#pod I<b> is the number of sides on each die. '%' is shorthand for 100. 
#pod
#pod =back 
#pod
#pod The optional end modifies the sum of the rolls. 'b' means take the 
#pod "best" I<c> rolls and sum them. Also '/' truncates the result to
#pod an integer after division.
#pod
#pod Dice specifications can be piped in, given on STDIN or as positional 
#pod parameters from the command line.
#pod
#pod If a positional parameter matches a file name, it will be opened and 
#pod each line of the file evaluated.
