NAME
    MARC::Field008 - Class for parsing and serialization of MARC field 008.

SYNOPSIS
     use MARC::Field008;

     my $obj = MARC::Field008->new(%params);
     my $data_obj = $cnf->parse($field_008);
     my $field_008 = $cnf->serialize($data_obj);

METHODS
  "new"
     my $obj = MARC::Field008->new(%params);

    Constructor.

    *       "leader"

            MARC leader string.

            It's required.

            Default is undef.

    *       "verbose"

            Verbose mode.

            Default is 0.

    Returns instance of object.

  "parse"
     my $data_obj = $cnf->parse($field_008);

    Parse MARC field 008 string to data object.

    Returns instance of Data::MARC::Field008.

  "serialize"
     my $field_008 = $cnf->serialize($data_obj);

    Serialize Data::MARC::Field008 object to string..

    Returns string.

ERRORS
     new():
             From Mo::utils::check_bool():
                     Parameter 'verbose' must be a bool (0/1).
                             Value: %s
             From Mo::utils::check_isa():
                     Parameter 'leader' must be a 'Data::MARC::Leader' object.
                             Value: %s
                             Reference: %s
             From Mo::utils::check_required():
                     Parameter 'leader' is required.
             From Class::Utils::set_params():
                     Unknown parameter '%s'.

     parse():
             Bad length of MARC 008 field.
                     Length: %s

             Errors from L<Data::MARC::Field008>, see documentation.

     serialize():
             Bad 'Data::MARC::Field008' instance to serialize.

EXAMPLE1
     use strict;
     use warnings;

     use MARC::Field008;
     use MARC::Leader;
     use Data::Printer;

     # Object.
     my $leader = MARC::Leader->new->parse('     nam a22        4500');
     my $obj = MARC::Field008->new(
             'leader' => $leader,
     );

     # Parse.
     my $data = $obj->parse('830304s1982    xr a         u0|0 | cze  ');

     # Dump.
     p $data;

     # Output:
     # Data::MARC::Field008  {
     #     parents: Mo::Object
     #     public methods (13):
     #         BUILD
     #         Data::MARC::Field008::Utils:
     #             check_cataloging_source, check_date, check_modified_record, check_type_of_date
     #         Error::Pure:
     #             err
     #         Error::Pure::Utils:
     #             err_get
     #         Mo::utils:
     #             check_isa, check_length_fix, check_number, check_required, check_strings
     #         Readonly:
     #             Readonly
     #     private methods (0)
     #     internals: {
     #         cataloging_source      " ",
     #         date_entered_on_file   830304,
     #         date1                  1982,
     #         date2                  "    ",
     #         language               "cze",
     #         material               Data::MARC::Field008::Book,
     #         material_type          "book",
     #         modified_record        " ",
     #         place_of_publication   "xr ",
     #         raw                    "830304s1982    xr a         u0|0 | cze  " (dualvar: 830304),
     #         type_of_date           "s"
     #     }
     # }

EXAMPLE2
     use strict;
     use warnings;

     use MARC::Field008;
     use MARC::Leader;
     use Data::MARC::Field008;
     use Data::MARC::Field008::Book;

     # Object.
     my $leader = MARC::Leader->new->parse('     nam a22        4500');
     my $obj = MARC::Field008->new(
             'leader' => $leader,
     );

     # Data.
     my $material = Data::MARC::Field008::Book->new(
             'biography' => ' ',
             'conference_publication' => '0',
             'festschrift' => '0',
             'form_of_item' => 'r',
             'government_publication' => ' ',
             'illustrations' => '    ',
             'index' => '0',
             'literary_form' => '0',
             'nature_of_content' => '    ',
             'target_audience' => ' ',
     );
     my $data = Data::MARC::Field008->new(
             'cataloging_source' => ' ',
             'date_entered_on_file' => '      ',
             'date1' => '    ',
             'date2' => '    ',
             'language' => 'cze',
             'material' => $material,
             'material_type' => 'book',
             'modified_record' => ' ',
             'place_of_publication' => '   ',
             'type_of_date' => 's',
     );

     # Serialize.
     print "'".$obj->serialize($data)."'\n";

     # Output:
     # '      s                r     000 0 cze  '

DEPENDENCIES
    Class::Utils, Data::MARC::Field008, Data::MARC::Field008::Book,
    Data::MARC::Field008::ComputerFile,
    Data::MARC::Field008::ContinuingResource, Data::MARC::Field008::Map,
    Data::MARC::Field008::MixedMaterial, Data::MARC::Field008::Music,
    Data::MARC::Field008::VisualMaterial, Error::Pure, List::Util,
    Mo::utils, Scalar::Util.

SEE ALSO
    Data::MARC::Field008
        Data object for MARC field 008.

REPOSITORY
    <https://github.com/michal-josef-spacek/MARC-Field008>

AUTHOR
    Michal Josef Špaček <mailto:skim@cpan.org>

    <http://skim.cz>

LICENSE AND COPYRIGHT
    © 2025 Michal Josef Špaček

    BSD 2-Clause License

VERSION
    0.02