[librecat-dev] my.very.deep.path in Catmandu::Fix::marc_spec

Nicolas Steenlant Nicolas.Steenlant at UGent.be
Mon Jun 13 16:24:01 CEST 2016


Yes, but trying to set a hash key on an array will be ignored.

>> marc_spec("245", my.title.$append)
>> 
>> makes 'my.title' an array. Now if I try something like
>> 
>> marc_spec("245$h", my.title.medium)


--
Nicolas Steenlant
Ghent University Library

Sint-Hubertusstraat 8
9000 Gent

nicolas.steenlant at ugent.be
+32 486 62 62 27




> On 13 Jun 2016, at 15:34, Patrick Hochstenbach <Patrick.Hochstenbach at UGent.be> wrote:
> 
> This works on my side:
> 
> catmandu -I lib convert MARC to YAML --fix 'marc_map(245b,my.title.medium); retain(my)' < t/camel.usmarc
> 
> I get the my.title.medium when there is a 245b field and no my.title.medium when not
> 
> Patrick
> 
> 
>> On 13 Jun 2016, at 08:31, Klee, Carsten <Carsten.Klee at sbb.spk-berlin.de> wrote:
>> 
>> Hi Nicolas!
>> 
>> Great, that works!
>> 
>> One question left:
>> 
>> marc_spec("245", my.title.$append)
>> 
>> makes 'my.title' an array. Now if I try something like
>> 
>> marc_spec("245$h", my.title.medium)
>> 
>> it will fail silently. I understand this. But shouldn't there be a warning or something? The user might think that there is no subfield 'h'.
>> 
>> Cheers!
>> 
>> Carsten
>> 
>> 
>> 
>>> -----Ursprüngliche Nachricht-----
>>> Von: Nicolas Steenlant [mailto:Nicolas.Steenlant at UGent.be]
>>> Gesendet: Freitag, 10. Juni 2016 14:38
>>> An: Klee, Carsten
>>> Cc: librecat-dev at lists.uni-bielefeld.de
>>> Betreff: Re: [librecat-dev] my.very.deep.path in Catmandu::Fix::marc_spec
>>> 
>>> Hi Carsten,
>>> 
>>> Catmandu::Util has some internal (and undocumented) functions that help
>>> with this:
>>> 
>>> use Catmandu::Util qw(:data);
>>> use Data::Dumper;
>>> my $data = {};
>>> my $nested = data_at('my.very.deep', $data, create => 1, key => 'path');
>>> set_data($nested, 'path', 'a value');
>>> print Dumper($data);
>>> 
>>> $VAR1 = {'my' => {'very' => {'deep' => {'path' => 'a value'}}}};
>>> 
>>> Calling data_at without the create => 1 option will not make missing
>>> intermediate structures
>>> and return undef in this case.
>>> The key => ‘path’ option gives a hint to data_at that you want ‘deep’ to be a
>>> hash
>>> and not an array,
>>> since it can’t guess the type by looking at the next segment of the path.
>>> 
>>> Regards,
>>> Nicolas
>>> 
>>> --
>>> Nicolas Steenlant
>>> Ghent University Library
>>> 
>>> Sint-Hubertusstraat 8
>>> 9000 Gent
>>> 
>>> nicolas.steenlant at ugent.be
>>> +32 486 62 62 27
>>> 
>>> 
>>>> On 10 Jun 2016, at 14:05, Klee, Carsten <Carsten.Klee at sbb.spk-berlin.de>
>>> wrote:
>>>> 
>>>> Hi Catmandu monks!
>>>> 
>>>> I’m currently working on the Catmandu::Fix::marc_spec [1]. I chose to stick
>>> with a simple ‘fix’ method (emit is quite hairy and Perl is difficult enough to
>>> learn).
>>>> 
>>>> To make long things short: How do I get my referenced data into the
>>> my.very.deep.path?
>>>> 
>>>> I read https://librecatproject.wordpress.com/2014/03/26/create-a-fixer-
>>> part-2/ . But is there an easy way to reuse the Catmandu::Fix methods in a
>>> non emit method?
>>>> 
>>>> Cheers!
>>>> 
>>>> Carsten
>>>> 
>>>> 
>>>> [1] <https://github.com/cKlee/Catmandu-Fix-marc_spec>
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Carsten Klee
>>>> Abt. Überregionale Bibliographische Dienste IIE
>>>> Staatsbibliothek zu Berlin – Preußischer Kulturbesitz
>>>> Potsdamer Straße 33
>>>> 10785 Berlin
>>>> 
>>>> Fon:  +49 30 266-43 44 02
>>>> Fax:   +49 30 266-33 40 01
>>>> carsten.klee at sbb.spk-berlin.de
>>>> www.zeitschriftendatenbank.de
>>>> _______________________________________________
>>>> librecat-dev mailing list
>>>> - send list mails to librecat-dev at lists.uni-bielefeld.de
>>>> - to unsubscribe or change options, visit https://lists.uni-
>>> bielefeld.de/mailman2/cgi/unibi/listinfo/librecat-dev
>>>> - project website: http://librecat.org/
>> 
>> 
>> _______________________________________________
>> librecat-dev mailing list
>> - send list mails to librecat-dev at lists.uni-bielefeld.de
>> - to unsubscribe or change options, visit https://lists.uni-bielefeld.de/mailman2/cgi/unibi/listinfo/librecat-dev
>> - project website: http://librecat.org/
> 
> Patrick Hochstenbach - digital architect
> University Library Ghent
> Sint-Hubertusstraat 8 - 9000 Ghent - Belgium
> patrick.hochstenbach at ugent.be
> +32 (0)9 264 7980
> 




More information about the librecat-dev mailing list