---
name: "MARC::Fast"
section: "3pm"
platform: "linux"
package: "libmarc-fast-perl"
version: "0.12-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/MARC::Fast"
---

# MARC::Fast(3pm)

Very fast implementation of MARC database reader

## 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)](/perl/1.md).
