Category: | Perl stuff |
Author/Contact Info | jacques |
Description: | Perl module search. Copy & paste the code to a CGI script and you are good to go. (You need to have HTML::Perlinfo installed.)
This is an updated version of the previous post, based on the latest version of HTML::Perlinfo, which fixes a security vulnerability pointed out by moritz. I added optional fields in the search form. The program searches @INC by default, so you don't need to specify search directories, but you can if you want to now. If you look at the documentation for HTML::Perlinfo::Modules, you will see that more options are available. For example, you can add different columns or change the POD links (by default, every module is linked with search.cpan.org). Suggestions/Code Updates Welcomed! Thanks to Your Mother, moritz, and everyone else who responded last time. |
#!/usr/bin/perl use strict; use warnings; use CGI ":standard"; use POSIX qw/uname/; use HTML::Perlinfo::Modules; print header(), start_html(-title => "Perl Module Search on @{[ (uname)[0..2] ]}", -head => style({type => 'text/css'}, join('',<DATA>) ), ), h1("Search Perl modules on @{[ (uname)[0..2] ]}"); print div({-style => "float:left; width: 20%;"}, h3("Separate names with commas"), start_form(-method => "get", -enctype => "application/x-www-form-urlencoded", -onsubmit => "return this._x ? false : ( this._x = +true )"), textfield("query"), br(), h3("Search from:"), textfield("from"), br(), h3("Sort modules by:"), radio_group(-name=>'sort', -values=>['Name','Version'], -default=>'Name'), p(), submit(), end_form(), ); if ( my $query = param("query") ) { my $module = HTML::Perlinfo::Modules ->new ->print_modules( show_only => [split(/, */, $query)], from => param("from") ? param("from") : \@INC, sort_by => param("sort") eq 'Version' ? + 'version' : 'name', full_page => 0 ); print div({-style => "float:left; width: 75%; margin-left: 2%"}, $module || h2("No modules found"), ); } print end_html(); __DATA__ body { font: 11px/13px helvetica-neue, helvetica, sans-serif; color: #001; } a:link {color: #000099; text-decoration: none;} a:hover {text-decoration: underline;} table {border-collapse: collapse; width: 100%;} .center {text-align: center;} .center table { margin-left: auto; margin-right: auto; text-align: lef +t;} .center th { text-align: center !important; } td, th { border: 1px solid #001; } .modules table {border: 0;} .modules td { border:0;} .modules th { border:0;} .p {text-align: left;} .e {background-color: #ccf; font-weight: bold; } .h {background-color: #99c; font-weight: bold; } .v {background-color: #ccc; } i {color: #666666; background-color: #ccc;} __END__ |
Back to
Code Catacombs