.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Biblio::COUNTER::Processor::Atomize 3pm" .TH Biblio::COUNTER::Processor::Atomize 3pm "2023-02-04" "perl v5.36.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Biblio::COUNTER::Processor::Atomize \- break a COUNTER report into itsy pieces .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 3 \& use Biblio::COUNTER::Processor::Atomize; \& $processor = Biblio::COUNTER::Processor::Atomize\->new; \& $report = $processor\->run($file_or_filehandle); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBBiblio::COUNTER::Processor::Atomize\fR breaks a \s-1COUNTER\s0 report into tiny pieces (figuratively speaking) and executes a callback for each valid usage number it finds. .PP The callback function should look something like this: .PP .Vb 8 \& sub my_callback { \& my %data = @_; \& $title = $data{title}; \& $count = $data{count}; \& $metric = $data{metric}; \& $period = $data{period}; \& # etc. \& } .Ve .PP The following elements may appear in the hash passed to the callback function: .IP "\fBcode\fR" 4 .IX Item "code" The short code that indicates the type of the report (e.g., \f(CW\*(C`JR1\*(C'\fR or \f(CW\*(C`DB3\*(C'\fR). .IP "\fBfile\fR" 4 .IX Item "file" The name of the file containing the report. Set to \f(CW\*(C`\-\*(C'\fR if processing standard input. .IP "\fBprocessor\fR" 4 .IX Item "processor" The Biblio::COUNTER::Processor::Atomize instance. .IP "\fBreport\fR" 4 .IX Item "report" The instance of the appropriate subclass of Biblio::COUNTER::Report .IP "\fBperiod\fR" 4 .IX Item "period" A string of the form \fIYYYY-mm\fR denoting the period in question. .IP "\fBmetric\fR" 4 .IX Item "metric" The type of event counted (\f(CW\*(C`requests\*(C'\fR, \f(CW\*(C`sessions\*(C'\fR, \f(CW\*(C`searches\*(C'\fR, or \&\f(CW\*(C`turnaways\*(C'\fR). .IP "\fBcount\fR" 4 .IX Item "count" The count itself. The callback is \fBnot\fR executed for a blank or invalid count. .IP "\fBplatform\fR" 4 .IX Item "platform" The platform on which the resource was provided. .IP "\fBtitle\fR" 4 .IX Item "title" The resource title. .IP "\fBpublisher\fR" 4 .IX Item "publisher" The resource's publisher. May be the empty string. .IP "\fBprint_issn\fR (journal reports only)" 4 .IX Item "print_issn (journal reports only)" The journal's print \s-1ISSN.\s0 .IP "\fBonline_issn\fR (journal reports only)" 4 .IX Item "online_issn (journal reports only)" The journal's online \s-1ISSN.\s0 .IP "\fBisbn\fR (book reports only)" 4 .IX Item "isbn (book reports only)" The book's \s-1ISBN.\s0 .SH "PUBLIC METHODS" .IX Header "PUBLIC METHODS" .IP "\fBnew\fR(\fI\f(CI%args\fI\fR)" 4 .IX Item "new(%args)" .Vb 1 \& $foo = Biblio::COUNTER::Processor::Atomize\->new; .Ve .Sp \&\fI\f(CI%args\fI\fR is a list of (key, value) pairs. The only key that means anything is \fBcallback\fR; the value associated with it is a reference to the desired callback function. .Sp The desired callback function prints (to standard output) a single tab-delimited line for each datum, with a header. Each line of output has the following elements, in the order listed: .RS 4 .IP "\fBcode\fR" 4 .IX Item "code" .PD 0 .IP "\fBfile\fR" 4 .IX Item "file" .IP "\fBplatform\fR" 4 .IX Item "platform" .IP "\fBperiod\fR" 4 .IX Item "period" .IP "\fBmetric\fR" 4 .IX Item "metric" .IP "\fBcount\fR" 4 .IX Item "count" .IP "\fBtitle\fR" 4 .IX Item "title" .IP "\fBpublisher\fR" 4 .IX Item "publisher" .IP "\fBprint_issn\fR (journal reports only)" 4 .IX Item "print_issn (journal reports only)" .IP "\fBonline_issn\fR (journal reports only)" 4 .IX Item "online_issn (journal reports only)" .IP "\fBisbn\fR (book reports only)" 4 .IX Item "isbn (book reports only)" .RE .RS 4 .RE .IP "\fBrun\fR(\fI\f(CI$file\fI\fR)" 4 .IX Item "run($file)" .PD .Vb 1 \& $report = $processor\->run($what); .Ve .Sp Process the given report. .Sp \&\fI\f(CI$what\fI\fR may be a file handle, the name of a file, or an instance of (a subclass of) Biblio::COUNTER::Report. .SH "INHERITANCE" .IX Header "INHERITANCE" \&\fBBiblio::COUNTER::Processor::Atomize\fR is designed to be inheritable. .SH "BUGS" .IX Header "BUGS" There are no known bugs. Please report bugs to the author via e\-mail (see below). .SH "AUTHOR" .IX Header "AUTHOR" Paul Hoffman (nkuitse \s-1AT\s0 cpan \s-1DOT\s0 org) .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright 2008 Paul M. Hoffman. .PP This is free software, and is made available under the same terms as Perl itself. .SH "SEE ALSO" .IX Header "SEE ALSO" Biblio::COUNTER .PP Biblio::COUNTER::Report .PP Biblio::COUNTER::Report::Processor