package App::ISBN::Format;
use strict;
use warnings;
use Business::ISBN;
use Class::Utils qw(set_params);
use Error::Pure qw(err);
use Getopt::Std;
our $VERSION = 0.02;
# Constructor.
sub new {
my ($class, @params) = @_;
# Create object.
my $self = bless {}, $class;
# Process parameters.
set_params($self, @params);
# Object.
return $self;
}
# Run.
sub run {
my $self = shift;
# Process arguments.
$self->{'_opts'} = {
'h' => 0,
};
if (! getopts('h', $self->{'_opts'}) || @ARGV < 1
|| $self->{'_opts'}->{'h'}) {
print STDERR "Usage: $0 [-h] [--version] isbn_string\n";
print STDERR "\t-h\t\tPrint help.\n";
print STDERR "\t--version\tPrint version.\n";
print STDERR "\tisbn_string\tISBN string.\n";
return 1;
}
$self->{'_isbn_string'} = shift @ARGV;
my $isbn_obj = Business::ISBN->new($self->{'_isbn_string'});
if (! $isbn_obj) {
err "ISBN '$self->{'_isbn_string'}' is bad.";
return 1;
}
# Validation.
if (! $isbn_obj->is_valid) {
$isbn_obj->fix_checksum;
# Check again.
if (! $isbn_obj->is_valid) {
err "ISBN '$self->{'_isbn_string'}' is not valid.";
return 1;
}
}
# Construct output.
my $isbn_concrete;
my $isbn_without_dash = $self->{'_isbn_string'};
$isbn_without_dash =~ s/-//msg;
if (length $isbn_without_dash > 10) {
$isbn_concrete = $isbn_obj->as_isbn13;
} else {
$isbn_concrete = $isbn_obj->as_isbn10;
}
print $self->{'_isbn_string'}.' -> '.$isbn_concrete->as_string, "\n";
return 0;
}
1;
__END__
=pod
=encoding utf8
=head1 NAME
App::ISBN::Format - Base class for cpan-get script.
=head1 SYNOPSIS
use App::ISBN::Format;
my $app = App::ISBN::Format->new;
my $exit_code = $app->run;
=head1 METHODS
=head2 C<new>
my $app = App::ISBN::Format->new;
Constructor.
=head2 C<run>
my $exit_code = $app->run;
Run.
Returns 1 for error, 0 for success.
=head1 ERRORS
new():
From Class::Utils::set_params():
Unknown parameter '%s'.
run():
ISBN '%s' is bad.
ISBN '%s' is not valid.
=head1 EXAMPLE
use strict;
use warnings;
use App::ISBN::Format;
# Arguments.
@ARGV = (
'9788025343364',
);
# Run.
exit App::ISBN::Format->new->run;
# Output:
# 9788025343364 -> 978-80-253-4336-4
=head1 DEPENDENCIES
L<Business::ISBN>,
L<Class::Utils>,
L<Error::Pure>,
L<Getopt::Std>.
=head1 REPOSITORY
L<https://github.com/michal-josef-spacek/App-ISBN-Format>
=head1 AUTHOR
Michal Josef Špaček L<mailto:skim@cpan.org>
L<http://skim.cz>
=head1 LICENSE AND COPYRIGHT
© 2022 Michal Josef Špaček
BSD 2-Clause License
=head1 VERSION
0.02
=cut