App-MARC-Leader
view release on metacpan or search on metacpan
package App::MARC::Leader;
use strict;
use warnings;
use Class::Utils qw(set_params);
use Getopt::Std;
use MARC::File::XML (BinaryEncoding => 'utf8', RecordFormat => 'MARC21');
use MARC::Leader 0.06;
use MARC::Leader::Print 0.08;
use Unicode::UTF8 qw(encode_utf8);
our $VERSION = 0.11;
# 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;
my $marc_leader;
# XXX Naive detect of MARC leader before getopts.
if (defined $ARGV[-1] && length($ARGV[-1]) eq 24) {
$marc_leader = pop @ARGV;
}
# Process arguments.
$self->{'_opts'} = {
'a' => undef,
'd' => 0,
'f' => undef,
'h' => 0,
'l' => undef,
'v' => undef,
};
if (! getopts('adf:hl:v', $self->{'_opts'})
|| $self->{'_opts'}->{'h'}
|| (! $self->{'_opts'}->{'f'} && ! defined $marc_leader)) {
print STDERR "Usage: $0 [-a] [-d] [-f marc_xml_file] [-h] [-l lang_code] [-v] [--version] [leader_string]\n";
print STDERR "\t-a\t\t\tPrint with ANSI colors (or use NO_COLOR/COLOR env variables).\n";
print STDERR "\t-d\t\t\tDon't print description.\n";
print STDERR "\t-f marc_xml_file\tMARC XML file.\n";
print STDERR "\t-h\t\t\tPrint help.\n";
print STDERR "\t-l lang_code\t\tISO 639-1 language code (default is from locales).\n";
print STDERR "\t-v\t\t\tVerbose mode.\n";
print STDERR "\t--version\t\tPrint version.\n";
print STDERR "\t[leader_string]\t\tMARC Leader string.\n";
return 1;
}
if ($self->{'_opts'}->{'f'}) {
my $marc_file = MARC::File::XML->in($self->{'_opts'}->{'f'});
# XXX Check
$marc_leader = $marc_file->next->leader;
}
# Parse MARC leader.
my $leader = MARC::Leader->new(
'verbose' => $self->{'_opts'}->{'v'},
)->parse($marc_leader);
# Print information.
print encode_utf8(scalar MARC::Leader::Print->new(
'lang' => $self->{'_opts'}->{'l'},
'mode_ansi' => $self->{'_opts'}->{'a'},
'mode_desc' => $self->{'_opts'}->{'d'} ? 0 : 1,
)->print($leader));
print "\n";
return 0;
}
1;
__END__
=pod
=encoding utf8
=head1 NAME
App::MARC::Leader - Base class for marc-leader tool.
=head1 SYNOPSIS
use App::MARC::Leader;
my $app = App::MARC::Leader->new;
my $exit_code = $app->run;
=head1 METHODS
=head2 C<new>
my $app = App::MARC::Leader->new;
Constructor.
Returns instance of object.
=head2 C<run>
my $exit_code = $app->run;
( run in 2.131 seconds using v1.01-cache-2.11-cpan-ceb78f64989 )