File Coverage

blib/lib/App/MARC/Leader.pm
Criterion Covered Total %
statement 46 46 100.0
branch 6 6 100.0
condition 8 9 88.8
subroutine 9 9 100.0
pod 2 2 100.0
total 71 72 98.6


line stmt bran cond sub pod time code
1             package App::MARC::Leader;
2              
3 4     4   181568 use strict;
  4         7  
  4         145  
4 4     4   34 use warnings;
  4         7  
  4         181  
5              
6 4     4   1914 use Class::Utils qw(set_params);
  4         60602  
  4         85  
7 4     4   2703 use Getopt::Std;
  4         10478  
  4         1984  
8 4     4   2017 use MARC::File::XML (BinaryEncoding => 'utf8', RecordFormat => 'MARC21');
  4         730265  
  4         37  
9 4     4   2703 use MARC::Leader;
  4         48057  
  4         207  
10 4     4   2411 use MARC::Leader::Print;
  4         16209  
  4         2057  
11              
12             our $VERSION = 0.07;
13              
14             # Constructor.
15             sub new {
16 7     7 1 790970 my ($class, @params) = @_;
17              
18             # Create object.
19 7         15 my $self = bless {}, $class;
20              
21             # Process parameters.
22 7         29 set_params($self, @params);
23              
24             # Object.
25 7         50 return $self;
26             }
27              
28             # Run.
29             sub run {
30 6     6 1 7 my $self = shift;
31              
32 6         8 my $marc_leader;
33             # XXX Naive detect of MARC leader before getopts.
34 6 100 100     32 if (defined $ARGV[-1] && length($ARGV[-1]) eq 24) {
35 1         1 $marc_leader = pop @ARGV;
36             }
37              
38             # Process arguments.
39 6         36 $self->{'_opts'} = {
40             'a' => undef,
41             'd' => 0,
42             'f' => undef,
43             'h' => 0,
44             };
45 6 100 100     22 if (! getopts('adf:h', $self->{'_opts'})
      66        
46             || (! $self->{'_opts'}->{'f'} && ! defined $marc_leader)
47             || $self->{'_opts'}->{'h'}) {
48              
49 3         371 print STDERR "Usage: $0 [-a] [-d] [-f marc_xml_file] [-h] [--version] [leader_string]\n";
50 3         67 print STDERR "\t-a\t\t\tPrint with ANSI colors (or use NO_COLOR/COLOR env variables).\n";
51 3         29 print STDERR "\t-d\t\t\tDon't print description.\n";
52 3         26 print STDERR "\t-f marc_xml_file\tMARC XML file.\n";
53 3         27 print STDERR "\t-h\t\t\tPrint help.\n";
54 3         24 print STDERR "\t--version\t\tPrint version.\n";
55 3         28 print STDERR "\tleader_string\t\tMARC Leader string.\n";
56 3         13 return 1;
57             }
58              
59 3 100       133 if ($self->{'_opts'}->{'f'}) {
60 2         21 my $marc_file = MARC::File::XML->in($self->{'_opts'}->{'f'});
61             # XXX Check
62 2         145 $marc_leader = $marc_file->next->leader;
63             }
64              
65             # Parse MARC leader.
66 3         5978 my $leader = MARC::Leader->new->parse($marc_leader);
67              
68             # Print information.
69             print scalar MARC::Leader::Print->new(
70             'mode_ansi' => $self->{'_opts'}->{'a'},
71 3         1432 'mode_desc' => ! $self->{'_opts'}->{'d'},
72             )->print($leader);
73 3         4556 print "\n";
74              
75 3         24 return 0;
76             }
77              
78             1;
79              
80              
81             __END__
82              
83             =pod
84              
85             =encoding utf8
86              
87             =head1 NAME
88              
89             App::MARC::Leader - Base class for marc-leader script.
90              
91             =head1 SYNOPSIS
92              
93             use App::MARC::Leader;
94              
95             my $app = App::MARC::Leader->new;
96             my $exit_code = $app->run;
97              
98             =head1 METHODS
99              
100             =head2 C<new>
101              
102             my $app = App::MARC::Leader->new;
103              
104             Constructor.
105              
106             Returns instance of object.
107              
108             =head2 C<run>
109              
110             my $exit_code = $app->run;
111              
112             Run.
113              
114             Returns 1 for error, 0 for success.
115              
116             =head1 ERRORS
117              
118             new():
119             From Class::Utils::set_params():
120             Unknown parameter '%s'.
121              
122             =head1 EXAMPLE1
123              
124             =for comment filename=print_marc_leader_from_marc_xml_file.pl
125              
126             use strict;
127             use warnings;
128              
129             use App::MARC::Leader;
130             use IO::Barf qw(barf);
131             use File::Temp qw(tempfile);
132             use MIME::Base64;
133              
134             # Content.
135             my $marc_xml_example = <<'END';
136             PD94bWwgdmVyc2lvbiA9ICIxLjAiIGVuY29kaW5nID0gIlVURi04Ij8+Cjxjb2xsZWN0aW9uIHht
137             bG5zPSJodHRwOi8vd3d3LmxvYy5nb3YvTUFSQzIxL3NsaW0iIHhtbG5zOnhzaT0iaHR0cDovL3d3
138             dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0
139             cDovL3d3dy5sb2MuZ292L01BUkMyMS9zbGltIGh0dHA6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMv
140             bWFyY3htbC9zY2hlbWEvTUFSQzIxc2xpbS54c2QiPgogIDxyZWNvcmQgeG1sbnM9Imh0dHA6Ly93
141             d3cubG9jLmdvdi9NQVJDMjEvc2xpbSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
142             L1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmxvYy5n
143             b3YvTUFSQzIxL3NsaW0gaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9tYXJjeG1sL3NjaGVt
144             YS9NQVJDMjFzbGltLnhzZCI+CiAgICA8bGVhZGVyPiAgICAgbmFtIGEyMiAgICAgICAgNDUwMDwv
145             bGVhZGVyPgogICAgPGNvbnRyb2xmaWVsZCB0YWc9IjAwMSI+Y2s4MzAwMDc4PC9jb250cm9sZmll
146             bGQ+CiAgICA8Y29udHJvbGZpZWxkIHRhZz0iMDAzIj5DWiBQck5LPC9jb250cm9sZmllbGQ+CiAg
147             ICA8Y29udHJvbGZpZWxkIHRhZz0iMDA1Ij4yMDIxMDMwOTEyMTk1MS4wPC9jb250cm9sZmllbGQ+
148             CiAgICA8Y29udHJvbGZpZWxkIHRhZz0iMDA3Ij50dTwvY29udHJvbGZpZWxkPgogICAgPGNvbnRy
149             b2xmaWVsZCB0YWc9IjAwOCI+ODMwMzA0czE5ODIgICAgeHIgYSAgICAgICAgIHUwfDAgfCBjemU8
150             L2NvbnRyb2xmaWVsZD4KICAgIDxkYXRhZmllbGQgdGFnPSIwMTUiIGluZDE9IiAiIGluZDI9IiAi
151             PgogICAgICA8c3ViZmllbGQgY29kZT0iYSI+Y25iMDAwMDAwMDk2PC9zdWJmaWVsZD4KICAgIDwv
152             ZGF0YWZpZWxkPgogICAgPGRhdGFmaWVsZCB0YWc9IjAyMCIgaW5kMT0iICIgaW5kMj0iICI+CiAg
153             ICAgIDxzdWJmaWVsZCBjb2RlPSJxIj4oQnJvxb4uKSA6PC9zdWJmaWVsZD4KICAgICAgPHN1YmZp
154             ZWxkIGNvZGU9ImMiPjkgS8SNczwvc3ViZmllbGQ+CiAgICA8L2RhdGFmaWVsZD4KICAgIDxkYXRh
155             ZmllbGQgdGFnPSIwMzUiIGluZDE9IiAiIGluZDI9IiAiPgogICAgICA8c3ViZmllbGQgY29kZT0i
156             YSI+KE9Db0xDKTM5NTYwNjY0PC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogICAgPGRhdGFm
157             aWVsZCB0YWc9IjA0MCIgaW5kMT0iICIgaW5kMj0iICI+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJh
158             Ij5BQkEwMDE8L3N1YmZpZWxkPgogICAgICA8c3ViZmllbGQgY29kZT0iYiI+Y3plPC9zdWJmaWVs
159             ZD4KICAgICAgPHN1YmZpZWxkIGNvZGU9ImQiPkFCQTAwMTwvc3ViZmllbGQ+CiAgICA8L2RhdGFm
160             aWVsZD4KICAgIDxkYXRhZmllbGQgdGFnPSIwODAiIGluZDE9IiAiIGluZDI9IiAiPgogICAgICA8
161             c3ViZmllbGQgY29kZT0iYSI+MzUyLzM1Mzwvc3ViZmllbGQ+CiAgICAgIDxzdWJmaWVsZCBjb2Rl
162             PSIyIj51bmRlZjwvc3ViZmllbGQ+CiAgICA8L2RhdGFmaWVsZD4KICAgIDxkYXRhZmllbGQgdGFn
163             PSIwODAiIGluZDE9IiAiIGluZDI9IiAiPgogICAgICA8c3ViZmllbGQgY29kZT0iYSI+MzM4LjQ2
164             PC9zdWJmaWVsZD4KICAgICAgPHN1YmZpZWxkIGNvZGU9IjIiPnVuZGVmPC9zdWJmaWVsZD4KICAg
165             IDwvZGF0YWZpZWxkPgogICAgPGRhdGFmaWVsZCB0YWc9IjEwMCIgaW5kMT0iMSIgaW5kMj0iICI+
166             CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJhIj5HYWJyaWVsLCBWbGFkaXNsYXY8L3N1YmZpZWxkPgog
167             ICAgICA8c3ViZmllbGQgY29kZT0iNyI+bXprMjAxNDg1MjcyMzwvc3ViZmllbGQ+CiAgICAgIDxz
168             dWJmaWVsZCBjb2RlPSI0Ij5hdXQ8L3N1YmZpZWxkPgogICAgPC9kYXRhZmllbGQ+CiAgICA8ZGF0
169             YWZpZWxkIHRhZz0iMjQ1IiBpbmQxPSIxIiBpbmQyPSIwIj4KICAgICAgPHN1YmZpZWxkIGNvZGU9
170             ImEiPlNsdcW+YnkgdiBzeXN0w6ltdSBuw6Fyb2Ruw61jaCB2w71ib3LFryA6PC9zdWJmaWVsZD4K
171             ICAgICAgPHN1YmZpZWxkIGNvZGU9ImIiPnZ5YnJhbsOpIGthcGl0b2x5IDogdXLEjWVubyBwcm8g
172             cG9zbC4gZmFrLiBvYmNob2Ruw60sIG9ib3IgRWtvbm9taWthIHNsdcW+ZWIgYSBjZXN0b3Zuw61o
173             byBydWNodSAvPC9zdWJmaWVsZD4KICAgICAgPHN1YmZpZWxkIGNvZGU9ImMiPlZsYWRpc2xhdiBH
174             YWJyaWVsLCBMYWRpc2xhdiBaYXBhZGxvPC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogICAg
175             PGRhdGFmaWVsZCB0YWc9IjI1MCIgaW5kMT0iICIgaW5kMj0iICI+CiAgICAgIDxzdWJmaWVsZCBj
176             b2RlPSJhIj4xLiB2eWQuPC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogICAgPGRhdGFmaWVs
177             ZCB0YWc9IjI2MCIgaW5kMT0iICIgaW5kMj0iICI+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJhIj5Q
178             cmFoYSA6PC9zdWJmaWVsZD4KICAgICAgPHN1YmZpZWxkIGNvZGU9ImIiPlNQTiw8L3N1YmZpZWxk
179             PgogICAgICA8c3ViZmllbGQgY29kZT0iYyI+MTk4Mjwvc3ViZmllbGQ+CiAgICAgIDxzdWJmaWVs
180             ZCBjb2RlPSJlIj4oUMWZw61icmFtIDo8L3N1YmZpZWxkPgogICAgICA8c3ViZmllbGQgY29kZT0i
181             ZiI+VFogNjYpPC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogICAgPGRhdGFmaWVsZCB0YWc9
182             IjMwMCIgaW5kMT0iICIgaW5kMj0iICI+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJhIj4xOTIgcy4g
183             Ojwvc3ViZmllbGQ+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJiIj5zY2jDqW1hdGEgOzwvc3ViZmll
184             bGQ+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJjIj4zMCBjbTwvc3ViZmllbGQ+CiAgICA8L2RhdGFm
185             aWVsZD4KICAgIDxkYXRhZmllbGQgdGFnPSI1MDAiIGluZDE9IiAiIGluZDI9IiAiPgogICAgICA8
186             c3ViZmllbGQgY29kZT0iYSI+Um96bW4uPC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogICAg
187             PGRhdGFmaWVsZCB0YWc9IjUwMCIgaW5kMT0iICIgaW5kMj0iICI+CiAgICAgIDxzdWJmaWVsZCBj
188             b2RlPSJhIj4zMDAgdsO9dC48L3N1YmZpZWxkPgogICAgPC9kYXRhZmllbGQ+CiAgICA8ZGF0YWZp
189             ZWxkIHRhZz0iNTAwIiBpbmQxPSIgIiBpbmQyPSIgIj4KICAgICAgPHN1YmZpZWxkIGNvZGU9ImEi
190             PkthcC4gNC4gbmFwcy4gUsWvxb5lbmEgRHVkb3bDoSwga2FwLiA4LiBqZSBzZXN0LiB6IHDFmcOt
191             c3DEm3Zrxa8gcsWvei4gYXV0b3LFrzwvc3ViZmllbGQ+CiAgICA8L2RhdGFmaWVsZD4KICAgIDxk
192             YXRhZmllbGQgdGFnPSI1NTAiIGluZDE9IiAiIGluZDI9IiAiPgogICAgICA8c3ViZmllbGQgY29k
193             ZT0iYSI+VnlkYXZhdGVsOiBWxaBFIHYgUHJhemU8L3N1YmZpZWxkPgogICAgPC9kYXRhZmllbGQ+
194             CiAgICA8ZGF0YWZpZWxkIHRhZz0iNjU1IiBpbmQxPSIgIiBpbmQyPSI3Ij4KICAgICAgPHN1YmZp
195             ZWxkIGNvZGU9ImEiPnXEjWVibmljZSB2eXNva8O9Y2ggxaFrb2w8L3N1YmZpZWxkPgogICAgICA8
196             c3ViZmllbGQgY29kZT0iNyI+ZmQxMzM3NzI8L3N1YmZpZWxkPgogICAgICA8c3ViZmllbGQgY29k
197             ZT0iMiI+Y3plbmFzPC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogICAgPGRhdGFmaWVsZCB0
198             YWc9IjcwMCIgaW5kMT0iMSIgaW5kMj0iICI+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJhIj5aYXBh
199             ZGxvLCBMYWRpc2xhdjwvc3ViZmllbGQ+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSI0Ij5hdXQ8L3N1
200             YmZpZWxkPgogICAgPC9kYXRhZmllbGQ+CiAgICA8ZGF0YWZpZWxkIHRhZz0iNzEwIiBpbmQxPSIy
201             IiBpbmQyPSIgIj4KICAgICAgPHN1YmZpZWxkIGNvZGU9ImEiPlZ5c29rw6EgxaFrb2xhIGVrb25v
202             bWlja8OhIHYgUHJhemU8L3N1YmZpZWxkPgogICAgICA8c3ViZmllbGQgY29kZT0iNyI+a24yMDAx
203             MDcwOTQwMzwvc3ViZmllbGQ+CiAgICA8L2RhdGFmaWVsZD4KICAgIDxkYXRhZmllbGQgdGFnPSI5
204             OTgiIGluZDE9IiAiIGluZDI9IiAiPgogICAgICA8c3ViZmllbGQgY29kZT0iYSI+aHR0cDovL2Fs
205             ZXBoLm5rcC5jei9GLz9mdW5jPWRpcmVjdCZhbXA7ZG9jX251bWJlcj0wMDAwMDAwOTYmYW1wO2xv
206             Y2FsX2Jhc2U9Q05CPC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogIDwvcmVjb3JkPgo8L2Nv
207             bGxlY3Rpb24+Cg==
208             END
209              
210             my (undef, $temp_file) = tempfile();
211              
212             barf($temp_file, decode_base64($marc_xml_example));
213              
214             # Arguments.
215             @ARGV = (
216             '-f',
217             $temp_file,
218             );
219              
220             # Run.
221             exit App::MARC::Leader->new->run;
222              
223             # Output (ANSI colors are used with set COLOR env variable):
224             # Record length: 0
225             # Record status: New
226             # Type of record: Language material
227             # Bibliographic level: Monograph/Item
228             # Type of control: No specified type
229             # Character coding scheme: UCS/Unicode
230             # Indicator count: Number of character positions used for indicators
231             # Subfield code count: Number of character positions used for a subfield code (2)
232             # Base address of data: 0
233             # Encoding level: Full level
234             # Descriptive cataloging form: Non-ISBD
235             # Multipart resource record level: Not specified or not applicable
236             # Length of the length-of-field portion: Number of characters in the length-of-field portion of a Directory entry (4)
237             # Length of the starting-character-position portion: Number of characters in the starting-character-position portion of a Directory entry (5)
238             # Length of the implementation-defined portion: Number of characters in the implementation-defined portion of a Directory entry (0)
239             # Undefined: Undefined
240              
241             =head1 EXAMPLE2
242              
243             =for comment filename=print_marc_leader_from_marc_xml_file_with_ansi.pl
244              
245             use strict;
246             use warnings;
247              
248             use App::MARC::Leader;
249             use IO::Barf qw(barf);
250             use File::Temp qw(tempfile);
251             use MIME::Base64;
252              
253             # Content.
254             my $marc_xml_example = <<'END';
255             PD94bWwgdmVyc2lvbiA9ICIxLjAiIGVuY29kaW5nID0gIlVURi04Ij8+Cjxjb2xsZWN0aW9uIHht
256             bG5zPSJodHRwOi8vd3d3LmxvYy5nb3YvTUFSQzIxL3NsaW0iIHhtbG5zOnhzaT0iaHR0cDovL3d3
257             dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0
258             cDovL3d3dy5sb2MuZ292L01BUkMyMS9zbGltIGh0dHA6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMv
259             bWFyY3htbC9zY2hlbWEvTUFSQzIxc2xpbS54c2QiPgogIDxyZWNvcmQgeG1sbnM9Imh0dHA6Ly93
260             d3cubG9jLmdvdi9NQVJDMjEvc2xpbSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx
261             L1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmxvYy5n
262             b3YvTUFSQzIxL3NsaW0gaHR0cDovL3d3dy5sb2MuZ292L3N0YW5kYXJkcy9tYXJjeG1sL3NjaGVt
263             YS9NQVJDMjFzbGltLnhzZCI+CiAgICA8bGVhZGVyPiAgICAgbmFtIGEyMiAgICAgICAgNDUwMDwv
264             bGVhZGVyPgogICAgPGNvbnRyb2xmaWVsZCB0YWc9IjAwMSI+Y2s4MzAwMDc4PC9jb250cm9sZmll
265             bGQ+CiAgICA8Y29udHJvbGZpZWxkIHRhZz0iMDAzIj5DWiBQck5LPC9jb250cm9sZmllbGQ+CiAg
266             ICA8Y29udHJvbGZpZWxkIHRhZz0iMDA1Ij4yMDIxMDMwOTEyMTk1MS4wPC9jb250cm9sZmllbGQ+
267             CiAgICA8Y29udHJvbGZpZWxkIHRhZz0iMDA3Ij50dTwvY29udHJvbGZpZWxkPgogICAgPGNvbnRy
268             b2xmaWVsZCB0YWc9IjAwOCI+ODMwMzA0czE5ODIgICAgeHIgYSAgICAgICAgIHUwfDAgfCBjemU8
269             L2NvbnRyb2xmaWVsZD4KICAgIDxkYXRhZmllbGQgdGFnPSIwMTUiIGluZDE9IiAiIGluZDI9IiAi
270             PgogICAgICA8c3ViZmllbGQgY29kZT0iYSI+Y25iMDAwMDAwMDk2PC9zdWJmaWVsZD4KICAgIDwv
271             ZGF0YWZpZWxkPgogICAgPGRhdGFmaWVsZCB0YWc9IjAyMCIgaW5kMT0iICIgaW5kMj0iICI+CiAg
272             ICAgIDxzdWJmaWVsZCBjb2RlPSJxIj4oQnJvxb4uKSA6PC9zdWJmaWVsZD4KICAgICAgPHN1YmZp
273             ZWxkIGNvZGU9ImMiPjkgS8SNczwvc3ViZmllbGQ+CiAgICA8L2RhdGFmaWVsZD4KICAgIDxkYXRh
274             ZmllbGQgdGFnPSIwMzUiIGluZDE9IiAiIGluZDI9IiAiPgogICAgICA8c3ViZmllbGQgY29kZT0i
275             YSI+KE9Db0xDKTM5NTYwNjY0PC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogICAgPGRhdGFm
276             aWVsZCB0YWc9IjA0MCIgaW5kMT0iICIgaW5kMj0iICI+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJh
277             Ij5BQkEwMDE8L3N1YmZpZWxkPgogICAgICA8c3ViZmllbGQgY29kZT0iYiI+Y3plPC9zdWJmaWVs
278             ZD4KICAgICAgPHN1YmZpZWxkIGNvZGU9ImQiPkFCQTAwMTwvc3ViZmllbGQ+CiAgICA8L2RhdGFm
279             aWVsZD4KICAgIDxkYXRhZmllbGQgdGFnPSIwODAiIGluZDE9IiAiIGluZDI9IiAiPgogICAgICA8
280             c3ViZmllbGQgY29kZT0iYSI+MzUyLzM1Mzwvc3ViZmllbGQ+CiAgICAgIDxzdWJmaWVsZCBjb2Rl
281             PSIyIj51bmRlZjwvc3ViZmllbGQ+CiAgICA8L2RhdGFmaWVsZD4KICAgIDxkYXRhZmllbGQgdGFn
282             PSIwODAiIGluZDE9IiAiIGluZDI9IiAiPgogICAgICA8c3ViZmllbGQgY29kZT0iYSI+MzM4LjQ2
283             PC9zdWJmaWVsZD4KICAgICAgPHN1YmZpZWxkIGNvZGU9IjIiPnVuZGVmPC9zdWJmaWVsZD4KICAg
284             IDwvZGF0YWZpZWxkPgogICAgPGRhdGFmaWVsZCB0YWc9IjEwMCIgaW5kMT0iMSIgaW5kMj0iICI+
285             CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJhIj5HYWJyaWVsLCBWbGFkaXNsYXY8L3N1YmZpZWxkPgog
286             ICAgICA8c3ViZmllbGQgY29kZT0iNyI+bXprMjAxNDg1MjcyMzwvc3ViZmllbGQ+CiAgICAgIDxz
287             dWJmaWVsZCBjb2RlPSI0Ij5hdXQ8L3N1YmZpZWxkPgogICAgPC9kYXRhZmllbGQ+CiAgICA8ZGF0
288             YWZpZWxkIHRhZz0iMjQ1IiBpbmQxPSIxIiBpbmQyPSIwIj4KICAgICAgPHN1YmZpZWxkIGNvZGU9
289             ImEiPlNsdcW+YnkgdiBzeXN0w6ltdSBuw6Fyb2Ruw61jaCB2w71ib3LFryA6PC9zdWJmaWVsZD4K
290             ICAgICAgPHN1YmZpZWxkIGNvZGU9ImIiPnZ5YnJhbsOpIGthcGl0b2x5IDogdXLEjWVubyBwcm8g
291             cG9zbC4gZmFrLiBvYmNob2Ruw60sIG9ib3IgRWtvbm9taWthIHNsdcW+ZWIgYSBjZXN0b3Zuw61o
292             byBydWNodSAvPC9zdWJmaWVsZD4KICAgICAgPHN1YmZpZWxkIGNvZGU9ImMiPlZsYWRpc2xhdiBH
293             YWJyaWVsLCBMYWRpc2xhdiBaYXBhZGxvPC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogICAg
294             PGRhdGFmaWVsZCB0YWc9IjI1MCIgaW5kMT0iICIgaW5kMj0iICI+CiAgICAgIDxzdWJmaWVsZCBj
295             b2RlPSJhIj4xLiB2eWQuPC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogICAgPGRhdGFmaWVs
296             ZCB0YWc9IjI2MCIgaW5kMT0iICIgaW5kMj0iICI+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJhIj5Q
297             cmFoYSA6PC9zdWJmaWVsZD4KICAgICAgPHN1YmZpZWxkIGNvZGU9ImIiPlNQTiw8L3N1YmZpZWxk
298             PgogICAgICA8c3ViZmllbGQgY29kZT0iYyI+MTk4Mjwvc3ViZmllbGQ+CiAgICAgIDxzdWJmaWVs
299             ZCBjb2RlPSJlIj4oUMWZw61icmFtIDo8L3N1YmZpZWxkPgogICAgICA8c3ViZmllbGQgY29kZT0i
300             ZiI+VFogNjYpPC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogICAgPGRhdGFmaWVsZCB0YWc9
301             IjMwMCIgaW5kMT0iICIgaW5kMj0iICI+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJhIj4xOTIgcy4g
302             Ojwvc3ViZmllbGQ+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJiIj5zY2jDqW1hdGEgOzwvc3ViZmll
303             bGQ+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJjIj4zMCBjbTwvc3ViZmllbGQ+CiAgICA8L2RhdGFm
304             aWVsZD4KICAgIDxkYXRhZmllbGQgdGFnPSI1MDAiIGluZDE9IiAiIGluZDI9IiAiPgogICAgICA8
305             c3ViZmllbGQgY29kZT0iYSI+Um96bW4uPC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogICAg
306             PGRhdGFmaWVsZCB0YWc9IjUwMCIgaW5kMT0iICIgaW5kMj0iICI+CiAgICAgIDxzdWJmaWVsZCBj
307             b2RlPSJhIj4zMDAgdsO9dC48L3N1YmZpZWxkPgogICAgPC9kYXRhZmllbGQ+CiAgICA8ZGF0YWZp
308             ZWxkIHRhZz0iNTAwIiBpbmQxPSIgIiBpbmQyPSIgIj4KICAgICAgPHN1YmZpZWxkIGNvZGU9ImEi
309             PkthcC4gNC4gbmFwcy4gUsWvxb5lbmEgRHVkb3bDoSwga2FwLiA4LiBqZSBzZXN0LiB6IHDFmcOt
310             c3DEm3Zrxa8gcsWvei4gYXV0b3LFrzwvc3ViZmllbGQ+CiAgICA8L2RhdGFmaWVsZD4KICAgIDxk
311             YXRhZmllbGQgdGFnPSI1NTAiIGluZDE9IiAiIGluZDI9IiAiPgogICAgICA8c3ViZmllbGQgY29k
312             ZT0iYSI+VnlkYXZhdGVsOiBWxaBFIHYgUHJhemU8L3N1YmZpZWxkPgogICAgPC9kYXRhZmllbGQ+
313             CiAgICA8ZGF0YWZpZWxkIHRhZz0iNjU1IiBpbmQxPSIgIiBpbmQyPSI3Ij4KICAgICAgPHN1YmZp
314             ZWxkIGNvZGU9ImEiPnXEjWVibmljZSB2eXNva8O9Y2ggxaFrb2w8L3N1YmZpZWxkPgogICAgICA8
315             c3ViZmllbGQgY29kZT0iNyI+ZmQxMzM3NzI8L3N1YmZpZWxkPgogICAgICA8c3ViZmllbGQgY29k
316             ZT0iMiI+Y3plbmFzPC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogICAgPGRhdGFmaWVsZCB0
317             YWc9IjcwMCIgaW5kMT0iMSIgaW5kMj0iICI+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSJhIj5aYXBh
318             ZGxvLCBMYWRpc2xhdjwvc3ViZmllbGQ+CiAgICAgIDxzdWJmaWVsZCBjb2RlPSI0Ij5hdXQ8L3N1
319             YmZpZWxkPgogICAgPC9kYXRhZmllbGQ+CiAgICA8ZGF0YWZpZWxkIHRhZz0iNzEwIiBpbmQxPSIy
320             IiBpbmQyPSIgIj4KICAgICAgPHN1YmZpZWxkIGNvZGU9ImEiPlZ5c29rw6EgxaFrb2xhIGVrb25v
321             bWlja8OhIHYgUHJhemU8L3N1YmZpZWxkPgogICAgICA8c3ViZmllbGQgY29kZT0iNyI+a24yMDAx
322             MDcwOTQwMzwvc3ViZmllbGQ+CiAgICA8L2RhdGFmaWVsZD4KICAgIDxkYXRhZmllbGQgdGFnPSI5
323             OTgiIGluZDE9IiAiIGluZDI9IiAiPgogICAgICA8c3ViZmllbGQgY29kZT0iYSI+aHR0cDovL2Fs
324             ZXBoLm5rcC5jei9GLz9mdW5jPWRpcmVjdCZhbXA7ZG9jX251bWJlcj0wMDAwMDAwOTYmYW1wO2xv
325             Y2FsX2Jhc2U9Q05CPC9zdWJmaWVsZD4KICAgIDwvZGF0YWZpZWxkPgogIDwvcmVjb3JkPgo8L2Nv
326             bGxlY3Rpb24+Cg==
327             END
328              
329             my (undef, $temp_file) = tempfile();
330              
331             barf($temp_file, decode_base64($marc_xml_example));
332              
333             # Arguments.
334             @ARGV = (
335             '-a',
336             '-f',
337             $temp_file,
338             );
339              
340             # Run.
341             exit App::MARC::Leader->new->run;
342              
343             # Output:
344             # Record length: 0
345             # Record status: New
346             # Type of record: Language material
347             # Bibliographic level: Monograph/Item
348             # Type of control: No specified type
349             # Character coding scheme: UCS/Unicode
350             # Indicator count: Number of character positions used for indicators
351             # Subfield code count: Number of character positions used for a subfield code (2)
352             # Base address of data: 0
353             # Encoding level: Full level
354             # Descriptive cataloging form: Non-ISBD
355             # Multipart resource record level: Not specified or not applicable
356             # Length of the length-of-field portion: Number of characters in the length-of-field portion of a Directory entry (4)
357             # Length of the starting-character-position portion: Number of characters in the starting-character-position portion of a Directory entry (5)
358             # Length of the implementation-defined portion: Number of characters in the implementation-defined portion of a Directory entry (0)
359             # Undefined: Undefined
360              
361             =head1 DEPENDENCIES
362              
363             L<Class::Utils>,
364             L<Getopt::Std>,
365             L<MARC::File::XML>,
366             L<MARC::Leader>,
367             L<MARC::Leader::Print>.
368              
369             =head1 REPOSITORY
370              
371             L<https://github.com/michal-josef-spacek/App-MARC-Leader>
372              
373             =head1 AUTHOR
374              
375             Michal Josef Špaček L<mailto:skim@cpan.org>
376              
377             L<http://skim.cz>
378              
379             =head1 LICENSE AND COPYRIGHT
380              
381             © 2023-2024 Michal Josef Špaček
382              
383             BSD 2-Clause License
384              
385             =head1 VERSION
386              
387             0.07
388              
389             =cut