Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Perl modules search engine, part II

by jacques (Priest)
on Jul 12, 2008 at 04:20 UTC ( #697155=sourcecode: print w/ replies, xml ) Need Help??

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__

Comment on Perl modules search engine, part II
Download Code

Back to Code Catacombs

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: sourcecode [id://697155]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (5)
As of 2014-08-01 01:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (256 votes), past polls