Catman...arc_cut(3pm)
π Catman...arc_cut(3pm) β aka Catmandu::Fix::marc_cut π
okay bestie, so this page lives in the User Contributed Perl Documentation section of your manual, and it's all about a Fix called Catmandu::Fix::marc_cut. Let's get into it π«Ά
β¨ 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 π¦
So this Fix is literally the twin of Catmandu::Fix::marc_copy, except it also removes all the matching fields from the MARC record after it copies them out. Copy then yeet, basically. no cap π
π METHODS π
marc_cut(MARC_PATH, JSON_PATH, [equals: REGEX])
It cuts the MARC fields pointed at by a MARC_PATH and drops them into a JSON_PATH. When you hand it an "equals" value, then only the MARC_PATHs whose value equals "equals" get cut over to JSON_PATH.
Here's the vibe check on how matching works:
- When the
MARC_PATHpoints at a subfield, then the subfield value needs to match"equals". - When the
MARC_PATHpoints at multiple subfields, then a concatenated string value needs to match"equals".
Check it out:
Data:
100 $aMy$bField.
# cut only the 100 fields which have a $a subfield
marc_cut(100a,tmp)
# cut only the 100 fields with have a $a subfield matching 'My'
marc_cut(100a,tmp,equals:"My")
# cut only the 100 fields with have a concatinated string value 'MyField.'
# (equals is an regex, the period "." needs to be escaped "\.")
marc_cut(100,tmp,equals:"MyField\.")
# cut only the 100 fields which have a "." at the end
marc_cut(100,tmp,equals:"\.$")
More examples, because we love options β¨
# 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,equals:"^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 items. 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, bestie:
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 π
Catmandu::Fix::marc_copyCatmandu::Fix::marc_paste
π 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.
okay that's the whole page, you ate it π this was perl v5.38.2, dated 2024-08-03, filed under Catman...arc_cut(3pm). go forth and cut some fields, bestie πβ¨
π¦ where this page comes from
- debian trixie: libcatmandu-marc-perl 1.320-1 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu resolute: libcatmandu-marc-perl 1.320-1 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu stonking: libcatmandu-marc-perl 1.320-1 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms