NAME

Catmandu::Fix::marc_cut - cut marc data in a structured way to a new field

SYNOPSIS

# Cut the 001 field out of the MARC record into the fixed001
marc_cut(001, fixed001)

# Cut all 650 fields out of the MARC record into the subjects array
marc_cut(650, subjects)

DESCRIPTION

This Fix work like Catmandu::Fix::marc_copy except it will also remove all mathincg fields from the MARC record

METHODS

marc_cut(MARC_PATH, JSON_PATH, [equals: REGEX])

Cut this MARC fields referred by a MARC_PATH to a JSON_PATH.

# Cut all the 300 fields
marc_cut(300,tmp)

# Cut all the 300 fields with indicator 1 = 1
marc_cut(300[1],tmp)

# Cut all the 300 fields which have subfield c
marc_cut(300c,tmp)

# Cut all the 300 fields which have subfield c equal to 'ABC'
marc_cut(300c,tmp,equal:"^ABC")

The JSON_PATH tmp will contain an array with one item per field that was cut. Each item is a hash containing the following fields:

tmp.*.tag        - The names of the MARC field
tmp.*.ind1       - The value of the first indicator
tmp.*.ind2       - The value of the second indicator
tmp.*.subfields  - An array of subfield item. Each subfield item is a
                   hash of the subfield code and subfield value

E.g.

tmp:
- tag: '300'
  ind1: ' '
  ind2: ' '
  subfields:
  - a: 'blabla:'
  - v: 'test123'
  - c: 'ok123'

These JSON paths can be used like:

# Set the first indicator of all 300 fields
do marc_each(var:this)
  if all_match(this.tag,300)

    # Set the first indicator to 1
    set_field(this.ind1,1)

    marc_paste(this)
  end
end

# Capitalize all the v subfields of 300
do marc_each(var:this)
  if all_match(this.tag,300)

     do list(path:this.subfields, var:loop)
        if (exists(loop.v))
            upcase(loop.v)
        end
     end

     marc_paste(this)
  end
end

INLINE

This Fix can be used inline in a Perl script:

use Catmandu::Fix::marc_copy as => 'marc_cut';

my $data = { record => ['650', ' ', 0, 'a', 'Perl'] };

$data = marc_cut($data,'650','subject');

print $data->{subject}->[0]->{tag} , "\n"; # '650'
print $data->{subject}->[0]->{ind1} , "\n"; # ' '
print $data->{subject}->[0]->{ind2} , "\n"; # 0
print $data->{subject}->[0]->{subfields}->[0]->{a} , "\n"; # 'Perl'

SEE ALSO

LICENSE AND COPYRIGHT

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.