table of contents
MARC::Fast(3pm) | User Contributed Perl Documentation | MARC::Fast(3pm) |
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).
2023-01-29 | perl v5.36.0 |