#!/usr/bin/perl -w =head1 NAME marclint - MARC record linting utility =head1 SYNOPSIS B<marclint> [options] file(s) =over 4 =item options =over 4 =item --help Print a summary of commands =item --[no]stats Print a statistical summary by file at the end. (Default: on) =back =back =cut use strict; use integer; use MARC::File::USMARC; use MARC::Lint; use Getopt::Long; use constant USAGE => <<"END"; Usage: marclint [options] file(s) options --help Print a summary of commands --version Print version --[no]quiet Suppress status messages --[no]stats Print a statistical summary by file at the end END my $stats = 1; my $help = 0; my $quiet = 0; my $rc = GetOptions( "stats!" => \$stats, "quiet!" => \$quiet, "help" => \$help, "version" => sub { print "$0, using MARC::Record v$MARC::Record::VERSION\n"; exit 1; }, ); my @files = @ARGV; die USAGE if $help or (not $rc) or (@files == 0); my $linter = new MARC::Lint; my %counts; my %errors; for my $filename ( @files ) { $counts{$filename} = 0; $errors{$filename} = 0; my $file = MARC::File::USMARC->in( $filename ) or die $MARC::File::ERROR; warn "$filename\n" unless $quiet; while ( my $marc = $file->next() ) { if ( not $marc ) { warn $MARC::Record::ERROR; ++$errors{$filename}; } else { ++$counts{$filename}; } #store warnings in @warningstoreturn my @warningstoreturn = (); #retrieve any decoding errors #get any warnings from decoding the raw MARC push @warningstoreturn, $marc->warnings(); $linter->check_record( $marc ); #add any warnings from MARC::Lint push @warningstoreturn, $linter->warnings; if ( @warningstoreturn ) { print join( "\n", $marc->title, @warningstoreturn, "", "", ); ++$errors{$filename}; } } # while $file->close(); } # for if ( $stats ) { print "\n\n"; print " Recs Errs Filename\n"; print "----- ----- --------\n"; for my $key ( sort keys %counts ) { printf( "%5d %5d %s\n", $counts{$key}, $errors{$key}, $key ); } # for } # if stats