Skip to content

Instantly share code, notes, and snippets.

@dctabuyz
Last active December 13, 2017 15:44
Show Gist options
  • Save dctabuyz/125903932ac7085e7ce8d12551ac4cf8 to your computer and use it in GitHub Desktop.
Save dctabuyz/125903932ac7085e7ce8d12551ac4cf8 to your computer and use it in GitHub Desktop.
prints comma separated page numbers
use strict;
use warnings;
use Getopt::Long;
use Pod::Usage qw(pod2usage);
use vars qw($from $to $odd $even $rev $two_sided $spread);
GetOptions(
'from|start|f|s=i' => \$from,
'to|till|end|t=i' => \$to,
'odd|uneven|u|o|1' => \$odd,
'even|e|0|2' => \$even,
'two-sided' => \$two_sided,
'spread|s' => \$spread,
'reversed|r' => \$rev,
'help|h' => sub { pod2usage(1) }
) || pod2usage(1);
pod2usage(1) unless ( $from and $to );
if ( $from > $to )
{
$rev = not $rev;
($from, $to) = ($to, $from);
}
$odd = $even = 1 unless ( $odd or $even );
unless ( $two_sided or $spread )
{
pages($from, $to);
exit;
}
unless ( $odd and $even )
{
warn "\nunable to use only odd or only even pagenumbers for two-sided printing\n\n";
pod2usage(1);
}
if ( $spread )
{
if ( ($to - $from + 1) % 2 )
{
pages($from, $from);
}
else
{
pages($from, $from);
pages($to, $to);
$to--;
}
$from++;
}
exit 0 if ($from > $to);
$rev = 1;
$odd = 0;
$even = 1;
pages($from, $to);
$rev = 0;
$odd = 1;
$even = 0;
pages($from, $to);
sub pages
{
my ($from, $to) = @_;
my @pages = ();
for my $page ( $rev ? reverse ($from .. $to) : ($from .. $to) )
{
if ( $page % 2 )
{
push(@pages, $page) if ( $odd );
}
elsif ( $even )
{
push(@pages, $page);
}
}
print join(',', @pages), "\n";
}
__END__
=head1 NAME
pagenum — page enumerator
=head1 SYNOPSIS
pagenum [options]
Options:
--from=, -f= enumerate from page number
--to=, -t= enumerate till page number
--odd, -o odd pages only
--even, -e even pages only
--reverse, -r reversed order
Example:
$ pagenum -f 3 -t 11 -e -r
10,8,6,4
$ pagenum -f 1 -t 11 -r
11,10,9,8,7,6,5,4,3,2,1
=head1 DESCRIPTION
B<This program> prints comma separated page numbers.
=cut
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment