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 PavlinusicCPAN ID: DPAVLIN[email protected]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).