NAME
    MARC::Leader - MARC leader class.

SYNOPSIS
     use MARC::Leader;

     my $obj = MARC::Leader->new(%params);
     my $leader_obj = $obj->parse($leader_str);
     my $leader_str = $obj->serialize($leader_obj);

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

    Constructor.

    *       "mode_strict"

            Strict mode for parsing.

            In not strict mode, parser could parse MARC leader with dashes
            instead of spaces,

            Default is 0.

    *       "verbose"

            Verbose mode flag. It's boolean value.

            Default value is 0.

    Returns instance of object.

  "parse"
     my $leader_obj = $obj->parse($leader_str);

    Parse MARC leader string to object.

    Returns instance of 'Data::MARC::Leader' object.

  "serialize"
     my $leader_str = $obj->serialize($leader_obj);

    Serialize MARC leader object to string.

    Returns string.

ERRORS
     new():
             From Class::Utils::set_params():
                     Unknown parameter '%s'.
             From Mo::utils::check_bool():
                     Parameter 'verbose' must be a bool (0/1).
                             Value: %s

     parse():
             Bad length of MARC leader.
                     Length: %s
             Couldn't parse MARC leader.
             (Errors in stack trace are:
                     Bad number in data base address.
                             String: %s
                     Bad number in length.
                             String: %s
             and from L<Data::MARC::Leader>, see documentation.)

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

EXAMPLE1
     use strict;
     use warnings;

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

     if (@ARGV < 1) {
             print "Usage: $0 marc_leader\n";
             exit 1;
     }
     my $marc_leader = $ARGV[0];

     # Object.
     my $obj = MARC::Leader->new;

     # Parse.
     my $leader_obj = $obj->parse($marc_leader);

     # Dump to output.
     p $leader_obj;

     # Output for '02200cem a2200541 i 4500':
     # Data::MARC::Leader  {
     #     parents: Mo::Object
     #     public methods (3):
     #         BUILD
     #         Mo::utils:
     #             check_strings
     #         Readonly:
     #             Readonly
     #     private methods (0)
     #     internals: {
     #         bibliographic_level               "m",
     #         char_coding_scheme                "a",
     #         data_base_addr                    541,
     #         descriptive_cataloging_form       "i",
     #         encoding_level                    " ",
     #         impl_def_portion_len              0,
     #         indicator_count                   2,
     #         length                            2200,
     #         length_of_field_portion_len       4,
     #         multipart_resource_record_level   " ",
     #         starting_char_pos_portion_len     5,
     #         status                            "c",
     #         subfield_code_count               2,
     #         type                              "e",
     #         type_of_control                   " ",
     #         undefined                         0
     #     }
     # }

EXAMPLE2
     use strict;
     use warnings;

     use MARC::Leader;
     use MARC::Leader::Print;

     if (@ARGV < 1) {
             print "Usage: $0 marc_leader\n";
             exit 1;
     }
     my $marc_leader = $ARGV[0];

     # Object.
     my $obj = MARC::Leader->new;

     # Parse.
     my $leader_obj = $obj->parse($marc_leader);

     # Print to output.
     print scalar MARC::Leader::Print->new->print($leader_obj), "\n";

     # Output for '02200cem a2200541 i 4500':
     # Record length: 2200
     # Record status: Corrected or revised
     # Type of record: Cartographic material
     # Bibliographic level: Monograph/Item
     # Type of control: No specified type
     # Character coding scheme: UCS/Unicode
     # Indicator count: Number of character positions used for indicators
     # Subfield code count: Number of character positions used for a subfield code (2)
     # Base address of data: 541
     # Encoding level: Full level
     # Descriptive cataloging form: ISBD punctuation included
     # Multipart resource record level: Not specified or not applicable
     # Length of the length-of-field portion: Number of characters in the length-of-field portion of a Directory entry (4)
     # Length of the starting-character-position portion: Number of characters in the starting-character-position portion of a Directory entry (5)
     # Length of the implementation-defined portion: Number of characters in the implementation-defined portion of a Directory entry (0)
     # Undefined: Undefined

EXAMPLE3
     use strict;
     use warnings;

     use Data::MARC::Leader;
     use MARC::Leader;

     # Object.
     my $obj = MARC::Leader->new;

     # Data object.
     my $data_marc_leader = Data::MARC::Leader->new(
             'bibliographic_level' => 'm',
             'char_coding_scheme' => 'a',
             'data_base_addr' => 541,
             'descriptive_cataloging_form' => 'i',
             'encoding_level' => ' ',
             'impl_def_portion_len' => '0',
             'indicator_count' => '2',
             'length' => 2200,
             'length_of_field_portion_len' => '4',
             'multipart_resource_record_level' => ' ',
             'starting_char_pos_portion_len' => '5',
             'status' => 'c',
             'subfield_code_count' => '2',
             'type' => 'e',
             'type_of_control' => ' ',
             'undefined' => '0',
     );

     # Serialize.
     my $leader = $obj->serialize($data_marc_leader);

     # Print to output.
     print $leader."\n";

     # Output:
     # 02200cem a2200541 i 4500

DEPENDENCIES
    Class::Utils, Data::MARC::Leader, English, Error::Pure, Mo::utils,
    Scalar::Util.

SEE ALSO
    Data::MARC::Leader
        Data object for MARC leader.

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

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

    <http://skim.cz>

LICENSE AND COPYRIGHT
    © 2023-2026 Michal Josef Špaček

    BSD 2-Clause License

ACKNOWLEDGEMENTS
    Development of this software has been made possible by institutional
    support for the long-term strategic development of the National Library
    of the Czech Republic as a research organization provided by the
    Ministry of Culture of the Czech Republic (DKRVO 2024–2028), Area 11:
    Linked Open Data.

VERSION
    0.09

