App-MARC-Field008
view release on metacpan or search on metacpan
Field008.pm view on Meta::CPAN
use warnings;
use Class::Utils qw(set_params);
use English;
use Error::Pure qw(err);
use Getopt::Std;
use MARC::File::XML (BinaryEncoding => 'utf8', RecordFormat => 'MARC21');
use MARC::Field008;
use MARC::Field008::Print;
use MARC::Leader;
use Unicode::UTF8 qw(encode_utf8);
our $VERSION = 0.01;
# 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, $marc_field008);
# XXX Naive detect of MARC field 008 and leader before getopts.
if (defined $ARGV[-1] && length($ARGV[-1]) eq 40
&& $ARGV[-2] && length($ARGV[-2]) eq '24') {
$marc_field008 = pop @ARGV;
$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_field008 && ! defined $marc_leader)) {
print STDERR "Usage: $0 [-a] [-d] [-f marc_xml_file] [-h] [-l lang_code] [-v] [--version] [leader_string field008_string]\n";
print STDERR "\t-a\t\t\t\tPrint with ANSI colors (or use NO_COLOR/COLOR env variables).\n";
print STDERR "\t-d\t\t\t\tDon't print description.\n";
print STDERR "\t-f marc_xml_file\t\tMARC XML file.\n";
print STDERR "\t-h\t\t\t\tPrint help.\n";
print STDERR "\t-l lang_code\t\t\tISO 639-1 language code (default is from locales).\n";
print STDERR "\t-v\t\t\t\tVerbose mode.\n";
print STDERR "\t--version\t\t\tPrint version.\n";
print STDERR "\t[leader_string field008_string]\tMARC leader and field 008 strings.\n";
return 1;
}
my $marc_xml_file = $ARGV[0];
if ($self->{'_opts'}->{'f'}) {
my $marc_file = MARC::File::XML->in($self->{'_opts'}->{'f'});
# XXX Check
my $marc_record = $marc_file->next;
$marc_leader = $marc_record->leader;
$marc_field008 = $marc_record->field('008')->as_string;
}
# Parse MARC leader.
my $leader = eval {
MARC::Leader->new(
'verbose' => $self->{'_opts'}->{'v'},
)->parse($marc_leader);
};
if ($EVAL_ERROR) {
err "Cannot parse MARC leader.";
}
my $field008 = eval {
MARC::Field008->new(
'leader' => $leader,
'verbose' => $self->{'_opts'}->{'v'},
)->parse($marc_field008);
};
if ($EVAL_ERROR) {
err "Cannot parse MARC field 008.";
}
# Print information.
print encode_utf8(scalar MARC::Field008::Print->new(
'lang' => $self->{'_opts'}->{'l'},
'mode_ansi' => $self->{'_opts'}->{'a'},
'mode_desc' => $self->{'_opts'}->{'d'} ? 0 : 1,
)->print($field008));
print "\n";
return 0;
}
1;
__END__
=pod
=encoding utf8
=head1 NAME
App::MARC::Field008 - Base class for marc-field008 tool.
=head1 SYNOPSIS
( run in 2.333 seconds using v1.01-cache-2.11-cpan-ceb78f64989 )