The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl 
use strict;
use warnings;
use utf8;

use Getopt::Std;
use Encode::Locale;
use Encode;

use Novel::Robot;

$| = 1;

my %opt;
getopt( 'btCSn', \%opt );

my $xs = Novel::Robot->new(
    type => $opt{t} ? $opt{t} : 'html', 
    site => $opt{b} ,
);
$opt{C} //=1;
$opt{S} //=1;

my ($m, $n)=(1, undef);

my $info = $xs->{parser}->get_index_ref($opt{b});
my $num = $info->{chapter_num};

use POSIX qw/ceil/;
my $en = ceil(log($num+1)/log(10));

for(my $m = 1; $m<=$num; $m+=$opt{n}){
    my $n = $m+$opt{n}-1;
    $n = $num if($n>$num);
    my $out = sprintf("%s-%s-%0${en}d.%s", 
        $info->{writer}, $info->{book}, 
        $n, $xs->{packer}->suffix());

    $xs->get_book($opt{b}, 
        min_chapter => $m, 
        max_chapter => $n, 
        with_toc => $opt{C}, 
        show_progress_bar => $opt{S}, 
        output => encode(locale=>$out), 
    );

}