NAME
MARC::Fast - Very fast implementation of MARC database reader
SYNOPSIS
use MARC::Fast;
my $marc = new MARC::Fast(
marcdb => 'unimarc.iso',
);
foreach my $mfn ( 1 .. $marc->count ) {
print $marc->to_ascii( $mfn );
}
For longer example with command line options look at "dump_fastmarc.pl" in scripts
DESCRIPTION
This is very fast alternative to MARC
and MARC::Record
modules.
It's is also very subtable for random access to MARC records (as opposed to sequential one).
METHODS
new
Read MARC database
my $marc = new MARC::Fast(
marcdb => 'unimarc.iso',
quiet => 0,
debug => 0,
assert => 0,
hash_filter => sub {
my ($t, $record_number) = @_;
$t =~ s/foo/bar/;
return $t;
},
);
count
Return number of records in database
print $marc->count;
fetch
Fetch record from database
my $hash = $marc->fetch(42);
First record number is 1
last_leader
Returns leader of last record fetched
print $marc->last_leader;
Added in version 0.08 of this module, so if you need it use:
use MARC::Fast 0.08;
to be sure that it's supported.
to_hash
Read record with specified MFN and convert it to hash
my $hash = $marc->to_hash( $mfn, include_subfields => 1,
hash_filter => sub { my ($l,$tag) = @_; return $l; }
);
It has ability to convert characters (using hash_filter
) from MARC database before creating structures enabling character re-mapping or quick fix-up of data. If you specified hash_filter
both in new
and to_hash
only the one from to_hash
will be used.
This function returns hash which is like this:
'200' => [
{
'i1' => '1',
'i2' => ' '
'a' => 'Goa',
'f' => 'Valdo D\'Arienzo',
'e' => 'tipografie e tipografi nel XVI secolo',
}
],
This method will also create additional field 000
with MFN.
to_ascii
print $marc->to_ascii( 42 );
UTF-8 ENCODING
This module does nothing with encoding. But, since MARC format is byte oriented even when using UTF-8 which has variable number of bytes for each character, file is opened in binary mode.
As a result, all scalars recturned to perl don't have utf-8 flag. Solution is to use hash_filter
and Encode to decode utf-8 encoding like this:
use Encode;
my $marc = new MARC::Fast(
marcdb => 'utf8.marc',
hash_filter => sub {
Encode::decode( 'utf-8', $_[0] );
},
);
This will affect to_hash
, but fetch
will still return binary representation since it doesn't support hash_filter
.
AUTHOR
Dobrica Pavlinusic
CPAN ID: DPAVLIN
dpavlin@rot13.org
http://www.rot13.org/~dpavlin/
COPYRIGHT
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.
SEE ALSO
Biblio::Isis, perl(1).