.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) .\" .\" 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 "Package::Locator::Index 3pm" .TH Package::Locator::Index 3pm "2022-06-16" "perl v5.34.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" Package::Locator::Index \- The package index of a repository .SH "VERSION" .IX Header "VERSION" version 0.010 .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use Package::Locator::Index; \& \& my $index = Package::Locator::Index\->new( repository_url => \*(Aqhttp://somewhere\*(Aq ); \& my $dist = $index\->distributions\->{\*(AqA/AU/AUTHOR/Foo\-Bar\-1.0.tar.gz\*(Aq}; \& my $pkg = $index\->packages\->{\*(AqFoo::Bar\*(Aq}; .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBThis is a private module and there are no user-serviceable parts here. The \s-1API\s0 documentation is for my own reference only.\fR .PP Package::Locator::Index is yet-another module for parsing the contents of the \fI02packages.details.txt\fR file from a CPAN-like repository. .SH "CONSTRUCTOR" .IX Header "CONSTRUCTOR" .ie n .SS "new( %attributes )" .el .SS "new( \f(CW%attributes\fP )" .IX Subsection "new( %attributes )" All the attributes listed below can be passed to the constructor, and can be retrieved via accessor methods with the same name. All attributes are read-only, and cannot be changed once the object is constructed. .SH "ATTRIBUTES" .IX Header "ATTRIBUTES" .SS "repository_url => 'http://somewhere'" .IX Subsection "repository_url => 'http://somewhere'" The base \s-1URL\s0 of the repository you want to get the index from. This is usually a \s-1CPAN\s0 mirror, but can be any site or directory that is organized in a CPAN-like structure. This attribute is required. .ie n .SS "user_agent => $user_agent_obj" .el .SS "user_agent => \f(CW$user_agent_obj\fP" .IX Subsection "user_agent => $user_agent_obj" The LWP::UserAgent object that will fetch the index file. If you do not provide a user agent, then a default one will be constructed for you. .SS "cache_dir => '/some/directory/path'" .IX Subsection "cache_dir => '/some/directory/path'" The path (as a string or Path::Class::Dir object) to a directory where the index file will be cached. If the directory does not exist, it will be created for you. If you do not specify a cache directory, then a temporary directory will be used. The temporary directory will be deleted when your application terminates. .ie n .SS "force => $boolean" .el .SS "force => \f(CW$boolean\fP" .IX Subsection "force => $boolean" Causes any cached index files to be removed, thus forcing a new one to be downloaded when the object is constructed. This only has effect if you specified the \f(CW\*(C`cache_dir\*(C'\fR attribute. The default is false. .SH "METHODS" .IX Header "METHODS" .SS "\fBindex_file()\fP" .IX Subsection "index_file()" Returns the path to the local copy of the index file (as a Path::Class::File). .SS "distributions" .IX Subsection "distributions" Returns a hashref representing the contents of the index. The keys are the paths to the distributions (as they appear in the index). The values are data structures that look like this: .PP .Vb 5 \& { \& path => \*(AqA/AU/AUTHOR/FooBar\-1.0.tar.gz\*(Aq, \& source => \*(Aqhttp://some.cpan.mirror\*(Aq \& packages => [ ## See package structure below ## ] \& } .Ve .SS "packages" .IX Subsection "packages" Returns a hashref representing the contents of the index. The keys are the names of packages. The values are data structures that look like this: .PP .Vb 5 \& { \& name => \*(AqFoo\*(Aq, \& version => \*(Aq1.0\*(Aq, \& distribution => \*(AqA/AU/AUTHOR/FooBar\-1.0.tar.gz\*(Aq \& } .Ve .SH "MOTIVATION" .IX Header "MOTIVATION" There are numerous existing modules for parsing the \&\fI02packages.details.txt\fR file, but I wasn't completely happy with any of them. Most of the existing modules transform the data into various flavors of Distribution and Package objects. But I'm not ready to commit to any particular \s-1API\s0 for Distributions and Packages (not even one of my own). So Package::Locator::Index exposes the index data as simple data structures. .SH "AUTHOR" .IX Header "AUTHOR" Jeffrey Ryan Thalhammer .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" This software is copyright (c) 2011 by Imaginative Software Systems. .PP This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.