Tracking Perl Module Use

Hundreds of Perl modules are available to expand the language for almost any task. There are even modules, such as CPAN.pm and Devel::Modlist, to help manage the modules you use.


August 09, 2001
URL:http://www.drdobbs.com/tracking-perl-module-use/184404624

Perl's All Mod Cons

Hundreds of Perl modules are available to expand the language for almost any task. There are even modules, such as CPAN.pm and Devel::Modlist, to help manage the modules you use.

One of strengths of the Perl language is its extendability through third party

modules, and hundreds of them are available on the

href="http://search.cpan.org">Comprehensive Perl Archive Network (CPAN).

Modules have names (typically their namespace name) and versions, and may come

in bundles, which are lists of modules that go together. Some modules need other

modules, so they have dependencies.

Installing modules is made easier with

href="http://search.cpan.org/search?dist=CPAN">CPAN.pm, a module by Andreas

Konig that does all of the hard work for you. You can quickly lose track of

the modules that your application needs, and which modules you need to tell

your users to install. The module names that you actually type into your source

code are most likely not the only modules you'll use.

For instance, you might use the extremely powerful

href="http://search.cpan.org/search?dist=LWP-Simple">LWP::Simple module in

a simple script that superficially does not use any other modules.

	

	

	#!/usr/bin/perl

	

	use LWP::Simple;



	getprint( "http://www.perl.org" );



	__END__



	


Behind the scenes, however,

href="http://search.cpan.org/search?dist=LWP-Simple">LWP::Simple may need

many other modules to do its work. Here is a complete list of all the modules

it might possibly use:

	



	AutoLoader             5.57

	Carp                       

	Config                     

	DynaLoader             1.04

	Errno                 1.111

	Exporter              5.562

	Exporter::Heavy            

	HTML::Entities         1.21

	HTML::HeadParser       2.14

	HTML::Parser           3.18

	HTTP::Date             1.43

	HTTP::Headers          1.37

	HTTP::Message          1.23

	HTTP::Request          1.27

	HTTP::Response         1.34

	HTTP::Status           1.26

	IO                     1.20

	IO::Handle             1.21

	IO::Select             1.14

	IO::Socket             1.26

	IO::Socket::INET       1.25

	IO::Socket::UNIX       1.20

	LWP                    5.51

	LWP::Debug                 

	LWP::MemberMixin           

	LWP::Protocol          1.36

	LWP::Protocol::http        

	LWP::Simple            1.33

	LWP::UserAgent         1.77

	SelectSaver                

	Socket                 1.72

	Symbol                 1.02

	Time::Local                

	URI                    1.11

	URI::Escape            3.16

	URI::URL               5.02

	URI::WithBase              

	URI::_generic              

	URI::_query                

	URI::_server               

	URI::http                  

	XSLoader               0.01

	overload                   

	strict                 1.01

	vars                       

	warnings                   

	warnings::register         



	


This presents a couple of maintenance problems. You develop your software with

one version of a module, but another version of the same module does something

slightly different, and earlier versions may have a bug. Or perhaps you want to

set up your staging server with exactly the same module configuration as your

production server. How do you determine which modules (and which versions) to

install with your application when it is not readily apparent from looking at

the source? How do you even know which modules you have installed?

You need to figure out which modules are currently installed and which modules

you are really using. The

href="http://search.cpan.org/search?dist=CPAN">CPAN.pm module has a function

called autobundle which will analyze your installed modules and

give you a list of the ones currently on CPAN.

The modules not in the list are the ones in the standard library that comes

with Perl, or the ones that you have installed locally and should already know

about.

	



	perl -MCPAN -e autobundle



	


href="http://search.cpan.org/search?dist=CPAN">CPAN.pm stores the list of

modules in the .cpan directory in a special type of module called

a Bundle file, which is just a special type of module. Take a look at the

bundle for my machine.

href="http://search.cpan.org/search?dist=CPAN">CPAN.pm can use bundles to

install groups of modules. In this case you can create a bundle just for the modules

that your application needs. If you can give your users the bundle file, they

can use

href="http://search.cpan.org/search?dist=CPAN">CPAN.pm to install the modules

they need, but let's come back to that. For more details about how Bundle files

work, see the documentation for

href="http://search.cpan.org/search?dist=CPAN">CPAN.pm.

Keeping track of all the modules used in your software can be difficult. Luckily

there's module to do this for you:

href="http://search.cpan.org/search?dist=Devel-Modlist">Devel::Modlist. This

handy debugger module can analyze your installed modules and give you various

lists of them depending on what you want to see. Indeed, I used it to created

the earlier list of modules. Just as with other Perl debuggers, you activate

the

href="http://search.cpan.org/search?dist=Devel-Modlist">Devel::Modlist debugger

with the

href="http://www.perldoc.com/perl5.6/pod/perlrun.html">-d switch to perl.

	



	perl -d:Modlist script.pl



	


Try it on one of your scripts and see what you get. You may be surprised about

how much is happening behind the scenes. Without CPAN

you would have had to create all of that code yourself. Next time your favorite

module author is in town make sure you treat them to a few drinks!

Notice that when you use the

href="http://search.cpan.org/search?dist=Devel-Modlist">Devel::Modlist debugger,

your script still runs and does whatever it does. You can stop the script from

executing but still get the module list by passing

href="http://search.cpan.org/search?dist=Devel-Modlist">Devel::Modlist special

parameters, although you have to call it in a slightly different way. To do

this you still use the

href="http://www.perldoc.com/perl5.6/pod/perlrun.html">-d switch to activate

the debugger, but you have to use the

href="http://www.perldoc.com/perl5.6/pod/perlrun.html">-M switch to include

the

href="http://search.cpan.org/search?dist=Devel-Modlist">Devel::Modlist module

since

href="http://www.perldoc.com/perl5.6/pod/perlrun.html">-M allows you to pass

information to the module. In this case, you want to pass the stop

command to

href="http://search.cpan.org/search?dist=Devel-Modlist">Devel::Modlist.

	



	perl -d -MDevel::Modlist=stop script.pl



	


You get the same module list as before, but your script does not execute, so you

do not have to worrying about separating the output from

href="http://search.cpan.org/search?dist=Devel-Modlist">Devel::Modlist from

the output of your script.

There is still a lot of information in that module list that you may not want.

You probably do not care about the standard library modules, like vars

and warnings, since if Perl is installed they should be there. If you want to

see which modules outside of the standard library are used, give

href="http://search.cpan.org/search?dist=Devel-Modlist">Devel::Modlist the

nocore parameter. Simply separate the parameters with a comma.

	



	perl -d -MDevel::Modlist=stop,nocore script.pl



	


This time you get a much shorter list of modules.

 

	



	HTTP::Status           1.26

	LWP::Simple            1.33



	



Notice that many of the non-standard modules disappeared, too.

href="http://search.cpan.org/search?dist=Devel-Modlist">Devel::Modlist takes

the shortest module name from a distribution and puts that in the list. When

you install that module, you end up installing the entire distribution.

You can also get a listing without the version numbers to easily

pipe the list into another program.

	



	perl -d -MDevel::Modlist=stop,nocore,noversion script.pl



	



If you are creating a module that will eventually make it onto CPAN,

you can put module information in your Makefile.PL (you should

use h2xs to

create your own Makefile.PL!) and

href="http://search.cpan.org/search?dist=CPAN">CPAN.pm will magically figure

it out. Simply tell your users to use

href="http://search.cpan.org/search?dist=CPAN">CPAN.pm . I am covering it

here, but you can read about it in the ExtUtils::MakeMaker

man page — look for PM_PREREQS.

However, I wrote a small script that can create the PM_PREREQS

portion of the Makefile.PL for you.

	



	#!/usr/bin/perl



	while( <> )

		{

		chomp;



		push @modules, ( split )[0];

		}



	$" = "\n";



	print <<"HERE";

	PM_PREREQ => {

	@{ [ map { "\t$_ => undef," } @modules ]}

		},

	HERE



	


If you input a list of modules, such as

	



	HTTP::Status


	LWP::Simple



	


you get out an incomplete bit of code that you can put into your WriteMakefile

routine in Makefile.PL. Again, see the h2xs

and ExtUtils::MakeMaker

man pages to see how this works.

	



	PM_PREREQ => {

		HTTP::Status => undef,

		LWP::Simple => undef,

		},





	



You can extend this so that the values of the anonymous hash, which in this example

are undef, are

the version numbers of that module.

But what about your bundle? Bundles are just special modules. They live in

the Bundle namespace (such as Bundle::MyModules),

have a $VERSION, and then a list of modules. Our bundle looks like

this. Put this module somewhere in Perl's @INC

search path and run the command in the SYNOPSIS section and

href="http://search.cpan.org/search?dist=CPAN">CPAN.pm will install those

modules.

	



	package Bundle::MyModules;



	$VERSION = '0.01';



	1;



	__END__



	=head1 NAME



	Bundle::MyModules - What you need to use my software



	=head1 SYNOPSIS



	perl -MCPAN -e 'install Bundle::MyModules'



	=head1 CONTENTS



	HTTP::Status



	LWP::Simple



	=cut



	


You can adapt the small script that I provided earlier to create the bundle

format for you if you wish. You can also take a look at a lot of other

href="http://search.cpan.org/search?mode=module&query=Bundle">Bundles available

on CPAN.

Now you can collect information on the modules that you have installed and which modules, whether core or third-party, that your script uses. You can incorporate this knowledge into your software distribution, give your users an easy way to install the right modules, and have enough time left over to catch the last episode of The Sopranos.


brian d foy has been a Perl user since 1994. He is founder of the first Perl users group, NY.pm, and

href="http://www.perl.org">Perl Mongers, the Perl advocacy organization. He has been teaching Perl through

href="http://perl.stonehenge.com">Stonehenge Consulting for the past three years, and has been a featured speaker at The Perl Conference, Perl University, YAPC, COMDEX, and Builder.com. Some of brian's other articles have appeared in The Perl Journal.

package Bundle::Snapshot_2001_05_14_00;
$VERSION = '0.01';
1;
__END__
=head1 NAME
Bundle::Snapshot_2001_05_14_00 - Snapshot of installation on vaio on Mon May 14 09:49:36 2001
=head1 SYNOPSIS
perl -MCPAN -e 'install Bundle::Snapshot_2001_05_14_00'
=head1 CONTENTS
AnyDBM_File undef
Apache 1.27
Apache::Connection 1.00
Apache::Constants 1.09
Apache::Constants::Exports undef
Apache::Debug 1.61
Apache::ExtUtils 1.04
Apache::FakeRequest 1.00
Apache::File 1.01
Apache::Include 1.00
Apache::Leak 1.00
Apache::Log 1.01
Apache::ModuleConfig 0.01
Apache::Opcode undef
Apache::Options 1.61
Apache::PerlRun undef
Apache::PerlRunXS 0.03
Apache::PerlSections 1.61
Apache::RedirectLogFix undef
Apache::Registry 2.01
Apache::RegistryBB undef
Apache::RegistryLoader 1.91
Apache::RegistryNG 1.00
Apache::Resource 1.71
Apache::SIG 1.91
Apache::Server 1.01
Apache::SizeLimit 0.03
Apache::StatINC 1.07
Apache::Status 2.02
Apache::Symbol 1.31
Apache::Symdump undef
Apache::Table 0.01
Apache::URI 1.00
Apache::Util 1.02
Apache::httpd_conf 0.01
Apache::src 0.01
Apache::test undef
Archive::Tar 0.22
Authen::SASL 0.11
Authen::SASL::CRAM_MD5 0.32
AutoLoader 5.57
AutoSplit 1.0305
B undef
B::Asmdata undef
B::Assembler undef
B::Bblock undef
B::Bytecode undef
B::C undef
B::CC undef
B::Debug undef
B::Deparse 0.59
B::Disassembler undef
B::Lint undef
B::Showlex undef
B::Stackobj undef
B::Stash undef
B::Terse undef
B::Xref undef
Benchmark 1
Business::ISBN 1.58
ByteLoader 0.03
CGI 2.56
CGI::Carp 1.14
CGI::Cookie 1.12
CGI::Fast 1.02
CGI::Pretty 1.03
CGI::Push 1.01
CPAN 1.59
CPAN::Admin 1.008
CPAN::FirstTime 1.50
CPAN::Nox 1.00
CPAN::WAIT 0.27
Carp undef
Chatbot::Eliza 0.97
Class::Struct 0.58
Compress::Zlib 1.11
Config undef
Convert::ASN1 0.08
Convert::ASN1::parser undef
Cwd 2.02
DB_File 1.72
Data::Dumper 2.101
Data::Grove::Parent 0.07
Data::Grove::Visitor 0.07
Date::Format 2.20
Date::Language 1.10
Date::Language::Austrian 1.01
Date::Language::Czech 1.01
Date::Language::Dutch 1.01
Date::Language::English 1.01
Date::Language::French 1.01
Date::Language::German 1.01
Date::Language::Italian 1.01
Date::Language::Norwegian 1.01
Date::Manip 5.39
Date::Parse 2.20
Devel::Coverage 0.2
Devel::Coverage::Analysis undef
Devel::Coverage::Utils undef
Devel::DProf 20000000.00_00
Devel::GraphVizProf 0.7
Devel::Modlist 0.4
Devel::Peek 1.00_01
Devel::SelfStubber 1.01
Devel::SmallProf 0.9
Digest 0.02
Digest::HMAC 1.00
Digest::HMAC_MD5 1.00
Digest::HMAC_SHA1 1.00
Digest::MD2 1.01
Digest::MD5 2.13
Digest::SHA1 1.03
DirHandle undef
Dumpvalue undef
DynaLoader 1.04
English undef
Env undef
Errno 1.111
Exporter 5.562
Exporter::Heavy undef
ExtUtils::Command 1.01
ExtUtils::Embed 1.2505
ExtUtils::Install 1.28
ExtUtils::Installed 0.02
ExtUtils::MM_Cygwin undef
ExtUtils::MM_OS2 undef
ExtUtils::MM_Unix 1.12603
ExtUtils::MM_VMS undef
ExtUtils::MM_Win32 undef
ExtUtils::MakeMaker 5.45
ExtUtils::Manifest 1.33
ExtUtils::Mkbootstrap 1.14
ExtUtils::Mksymlists 1.17
ExtUtils::Packlist 0.03
ExtUtils::testlib 1.11
Fatal 1.02
Fcntl 1.03
File::Basename 2.6
File::CheckTree undef
File::Compare 1.1002
File::Copy 2.03
File::DosGlob undef
File::Find undef
File::Glob 0.991
File::Listing 1.11
File::Path 1.0403
File::Spec 0.82
File::Spec::Functions 1.1
File::Spec::Mac 1.2
File::Spec::OS2 1.1
File::Spec::Unix 1.2
File::Spec::VMS 1.1
File::Spec::Win32 1.2
File::stat undef
FileCache undef
FileHandle 2.00
FindBin 1.42
Getopt::Long 2.23
Getopt::Std 1.02
Graph 0.201
Graph::BFS undef
Graph::Base undef
Graph::DFS undef
Graph::Directed undef
Graph::HeapElem 0.01
Graph::Traversal undef
Graph::Undirected undef
GraphViz 0.11
GraphViz::Data::Grapher 0.01
GraphViz::No 0.01
GraphViz::Parse::RecDescent 0.01
GraphViz::Remote 0.01
GraphViz::Small 0.01
GraphViz::XML 0.01
HTML::Entities 1.21
HTML::Filter 2.09
HTML::Form 0.03
HTML::HeadParser 2.14
HTML::LinkExtor 1.29
HTML::Parser 3.18
HTML::SimpleLinkExtor 0.71
HTML::Tagset 3.03
HTML::TokeParser 2.20
HTTP::Cookies 1.14
HTTP::Daemon 1.24
HTTP::Date 1.43
HTTP::Headers 1.37
HTTP::Headers::Auth 1.02
HTTP::Headers::ETag 1.03
HTTP::Headers::Util 1.09
HTTP::Message 1.23
HTTP::Negotiate 1.07
HTTP::Request 1.27
HTTP::Request::Common 1.19
HTTP::Response 1.34
HTTP::SimpleLinkChecker 0.51
HTTP::Status 1.26
Heap 0.50
Heap::Binary 0.01
Heap::Binomial 0.01
Heap::Elem 0.01
Heap::Elem::Num 0.01
Heap::Elem::NumRev 0.01
Heap::Elem::Ref 0.01
Heap::Elem::RefRev 0.01
Heap::Elem::Str 0.01
Heap::Elem::StrRev 0.01
Heap::Fibonacci 0.01
I18N::Collate undef
IO 1.20
IO::AtomicFile 1.106
IO::Dir 1.03
IO::File 1.08
IO::Handle 1.21
IO::InnerFile 1.104
IO::Interface 0.94
IO::Lines 1.111
IO::Pipe 1.121
IO::Poll 0.01
IO::Scalar 1.126
IO::ScalarArray 1.118
IO::Seekable 1.08
IO::Select 1.14
IO::Socket 1.26
IO::Socket::INET 1.25
IO::Socket::UNIX 1.20
IO::Stringy 1.220
IO::Wrap 1.104
IO::WrapTie 1.109
IPC::Msg 1.00
IPC::Open2 1.01
IPC::Open3 1.0103
IPC::Run 0.44
IPC::Run::IO undef
IPC::Run::Timer undef
IPC::Semaphore 1.00
IPC::SysV 1.03
LWP 5.51
LWP::Authen::Basic undef
LWP::Authen::Digest undef
LWP::Debug undef
LWP::MediaTypes 1.27
LWP::MemberMixin undef
LWP::Protocol 1.36
LWP::Protocol::GHTTP undef
LWP::Protocol::data undef
LWP::Protocol::file undef
LWP::Protocol::ftp undef
LWP::Protocol::gopher undef
LWP::Protocol::http undef
LWP::Protocol::https undef
LWP::Protocol::ldap undef
LWP::Protocol::mailto undef
LWP::Protocol::nntp undef
LWP::RobotUA 1.17
LWP::Simple 1.33
LWP::UserAgent 1.77
MD5 2.01
MIME::Base64 2.12
MIME::Body 5.403
MIME::Decoder 5.403
MIME::Decoder::Base64 5.403
MIME::Decoder::Binary 5.403
MIME::Decoder::Gzip64 5.403
MIME::Decoder::NBit 5.403
MIME::Decoder::QuotedPrint 5.403
MIME::Decoder::UU 5.403
MIME::Entity 5.404
MIME::Field::ConTraEnc 5.403
MIME::Field::ContDisp 5.403
MIME::Field::ContType 5.403
MIME::Field::ParamVal 5.403
MIME::Head 5.403
MIME::Parser 5.406
MIME::Parser::Filer undef
MIME::Parser::Reader undef
MIME::Parser::Results undef
MIME::QuotedPrint 2.03
MIME::Tools 5.410
MIME::WordDecoder undef
MIME::Words 5.404
Mail::Address 1.17
Mail::Cap 1.07
Mail::Field 1.08
Mail::Field::AddrList 1.0
Mail::Field::Date 1.03
Mail::Filter 1.01
Mail::Header 1.19
Mail::Internet 1.33
Mail::Mailer 1.21
Mail::Mailer::mail undef
Mail::Mailer::rfc822 undef
Mail::Mailer::sendmail undef
Mail::Mailer::smtp undef
Mail::Mailer::test undef
Mail::Send 1.09
Mail::Util 1.16
Math::Bezier 0.01
Math::BigFloat undef
Math::BigInt undef
Math::Complex 1.26
Math::Trig 1
Memoize 0.62
Memoize::AnyDBM_File undef
Memoize::Expire 0.51
Memoize::ExpireFile undef
Memoize::ExpireTest undef
Memoize::NDBM_File undef
Memoize::SDBM_File undef
Memoize::Saves undef
Memoize::Storable undef
NDBM_File 1.03
Net::Cmd 2.18
Net::Config 1.04
Net::DNS 0.12
Net::DNS::Header undef
Net::DNS::Packet undef
Net::DNS::Question undef
Net::DNS::RR undef
Net::DNS::RR::A undef
Net::DNS::RR::AAAA undef
Net::DNS::RR::AFSDB undef
Net::DNS::RR::CNAME undef
Net::DNS::RR::EID undef
Net::DNS::RR::HINFO undef
Net::DNS::RR::ISDN undef
Net::DNS::RR::LOC undef
Net::DNS::RR::MB undef
Net::DNS::RR::MG undef
Net::DNS::RR::MINFO undef
Net::DNS::RR::MR undef
Net::DNS::RR::MX undef
Net::DNS::RR::NAPTR undef
Net::DNS::RR::NIMLOC undef
Net::DNS::RR::NS undef
Net::DNS::RR::NSAP undef
Net::DNS::RR::NULL undef
Net::DNS::RR::PTR undef
Net::DNS::RR::PX undef
Net::DNS::RR::RP undef
Net::DNS::RR::RT undef
Net::DNS::RR::SOA undef
Net::DNS::RR::SRV undef
Net::DNS::RR::TXT undef
Net::DNS::RR::X25 undef
Net::DNS::Resolver undef
Net::DNS::Update undef
Net::Domain 2.13
Net::DummyInetd 1.06
Net::FTP 2.56
Net::FTP::A 1.13
Net::FTP::E undef
Net::FTP::I 1.08
Net::FTP::L undef
Net::FTP::dataconn undef
Net::LDAP 0.23
Net::LDAP::ASN undef
Net::LDAP::Constant undef
Net::LDAP::Control 0.04
Net::LDAP::Control::Paged 0.01
Net::LDAP::Control::ProxyAuth 1.01
Net::LDAP::Control::Sort 0.01
Net::LDAP::Control::SortResult undef
Net::LDAP::Control::VLV 0.01
Net::LDAP::Control::VLVResponse 0.01
Net::LDAP::DSML 0.06
Net::LDAP::DSML::Parser 0.06
Net::LDAP::Entry 0.13
Net::LDAP::Extension 1.01
Net::LDAP::Extra 0.01
Net::LDAP::Filter 0.11
Net::LDAP::LDIF 0.06
Net::LDAP::Message 1.05
Net::LDAP::Schema 0.09
Net::LDAP::Search 0.06
Net::LDAP::Util 0.06
Net::LDAPS 0.02
Net::NNTP 2.19
Net::Netmask 1.8
Net::Netrc 2.10
Net::PH 2.20
Net::POP3 2.21
Net::Ping 2.02
Net::RawIP 0.09
Net::SMTP 2.15
Net::SNPP 1.11
Net::Syslog 0.03
Net::Telnet 3.02
Net::Time 2.08
Net::hostent undef
Net::netent undef
Net::protoent undef
Net::servent undef
Netscape::Bookmarks 1.3
Netscape::Bookmarks::Alias 1.3
Netscape::Bookmarks::Category undef
Netscape::Bookmarks::Link 1.5
Netscape::Bookmarks::Separator 1.3
O undef
Opcode 1.04
POSIX 1.03
Parse::Yapp undef
Parse::Yapp::Driver 1.04
Parse::Yapp::Grammar undef
Parse::Yapp::Lalr undef
Parse::Yapp::Options undef
Parse::Yapp::Output undef
Parse::Yapp::Parse undef
Pod::Checker 1.098
Pod::Find 0.12
Pod::Functions undef
Pod::Html 1.03
Pod::InputObjects 1.12
Pod::Man 1.02
Pod::ParseUtils 0.2
Pod::Parser 1.12
Pod::Plainer 0.01
Pod::Select 1.12
Pod::Text 2.03
Pod::Text::Color 0.05
Pod::Text::Termcap 0.04
Pod::Usage 1.12
SDBM_File 1.02
SHA 2.00
Safe 2.06
Search::Dict undef
SelectSaver undef
SelfLoader 1.0901
Shell 0.2
Socket 1.72
Symbol 1.02
Sys::Hostname 1.1
Sys::Syslog 0.01
Term::ANSIColor 1.01
Term::Cap undef
Term::Complete undef
Term::ReadKey 2.14
Term::ReadLine undef
Term::ReadLine::Perl 0.99
Test 1.13
Test::Harness 1.1604
Text::Abbrev undef
Text::ParseWords 3.2
Text::Soundex 1.0
Text::Tabs 98.112801
Text::Wrap 98.112902
Tie::Array 1.01
Tie::Cycle 0.02
Tie::Handle 1.0
Tie::Hash undef
Tie::RefHash undef
Tie::Scalar undef
Tie::SubstrHash undef
Tie::Toggle 0.02
Time::HiRes 01.20
Time::Local undef
Time::Zone 2.20
Time::gmtime 1.01
Time::localtime 1.01
Time::tm undef
UNIVERSAL undef
URI 1.11
URI::Escape 3.16
URI::Heuristic 4.12
URI::URL 5.02
URI::WithBase undef
URI::_generic undef
URI::_login undef
URI::_query undef
URI::_segment undef
URI::_server undef
URI::_userpass undef
URI::data undef
URI::file undef
URI::file::Base undef
URI::file::FAT undef
URI::file::Mac undef
URI::file::OS2 undef
URI::file::QNX undef
URI::file::Unix undef
URI::file::Win32 undef
URI::ftp undef
URI::gopher undef
URI::http undef
URI::https undef
URI::ldap 1.10
URI::mailto undef
URI::news undef
URI::nntp undef
URI::pop undef
URI::rlogin undef
URI::rsync undef
URI::snews undef
URI::telnet undef
User::grent undef
User::pwent undef
WAIT::Client undef
WWW::RobotRules 1.21
WWW::RobotRules::AnyDBM_File 1.09
XML::Checker 0.09
XML::Checker::Parser undef
XML::DOM 1.28
XML::DOM::PerlSAX undef
XML::DOM::ValParser undef
XML::ESISParser 0.07
XML::Filter::DetectWS undef
XML::Filter::Reindent undef
XML::Filter::SAXT undef
XML::Handler::BuildDOM undef
XML::Handler::CanonXMLWriter 0.07
XML::Handler::Composer undef
XML::Handler::PrintEvents undef
XML::Handler::Sample undef
XML::Handler::Subs 0.07
XML::Handler::XMLWriter 0.07
XML::Parser 2.30
XML::Parser::Expat 2.30
XML::Parser::PerlSAX 0.07
XML::PatAct::Amsterdam 0.07
XML::PatAct::MatchName 0.07
XML::PatAct::ToObjects 0.07
XML::Perl2SAX 0.07
XML::RegExp undef
XML::SAX2Perl 0.07
XML::UM undef
XML::XQL 0.64
XML::XQL::DOM undef
XML::XQL::Date undef
XML::XQL::Debug undef
XML::XQL::DirXQL undef
XML::XQL::Parser undef
XML::XQL::Strict undef
XML::XSLT 0.32
attributes 0.03
attrs 1.0
autouse 1.02
base 1.01
blib 1.00
bytes undef
charnames undef
constant 1.02
diagnostics v1.0
fields 1.01
filetest undef
integer undef
less undef
lib 0.5564
locale undef
mod_perl 1.25
open undef
ops undef
overload undef
re 0.02
sigtrap 1.02
strict 1.01
subs undef
utf8 undef
vars undef
warnings undef
warnings::register undef

=head1 CONFIGURATION
Summary of my perl5 (revision 5.0 version 6 subversion 0) configuration:
  Platform:
    osname=freebsd, osvers=4.2-release, archname=i386-freebsd
    uname='freebsd vaio.perl.org 4.2-release freebsd 4.2-release #0: mon nov 20 13:02:55 gmt 2000 [email protected]:usrsrcsyscompilegeneric i386 '
    config_args='-d'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef
    useperlio=undef d_sfio=undef uselargefiles=define 
    use64bitint=undef use64bitall=undef uselongdouble=undef usesocks=undef
  Compiler:
    cc='cc', optimize='-O', gccversion=2.95.2 19991024 (release)
    cppflags='-fno-strict-aliasing -I/usr/local/include'
    ccflags ='-fno-strict-aliasing -I/usr/local/include'
    stdchar='char', d_stdstdio=undef, usevfork=true
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='cc', ldflags ='-Wl,-E  -L/usr/local/lib'
    libpth=/usr/lib /usr/local/lib
    libs=-lm -lc -lcrypt
    libc=, so=so, useshrplib=false, libperl=libperl.a
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
    cccdlflags='-DPIC -fpic', lddlflags='-shared  -L/usr/local/lib'

=head1 AUTHOR
This Bundle has been generated automatically by the autobundle routine in CPAN.pm.

Terms of Service | Privacy Statement | Copyright © 2024 UBM Tech, All rights reserved.