Thomas Klausner > CGI-URI2param-1.01 > CGI::URI2param

Download:
CGI-URI2param-1.01.tar.gz

Dependencies

Annotate this POD

CPAN RT

Open  0
View/Report Bugs
Module Version: 1.01   Source  

NAME ^

CGI::URI2param - convert parts of an URL to param values

SYNOPSIS ^

  use CGI::URI2param qw(uri2param);

  uri2param($req,\%regexes);

DESCRIPTION ^

CGI::URI2param takes a request object (as supplied by CGI.pm or Apache::Request) and a hashref of keywords mapped to regular expressions. It applies all of the regexes to the current URI and adds everything that matched to the 'param' list of the request object.

Why?

With CGI::URI2param you can instead of:

http://somehost.org/db?id=1234&style=fancy

present a nicerlooking URL like this:

http://somehost.org/db/style_fancy/id1234.html

To achieve this, simply do:

 CGI::URI2param::uri2param($r,{
                                style => 'style_(\w+)',
                                id    => 'id(\d+)\.html'
                               });

Now you can access the values like this:

 my $id=$r->param('id');
 my $style=$r->param('style');

If you are using mod_perl, please take a look at Apache::URI2param. It provides an Apache PerlInitHandler to make running CGI::URI2param easier for you. Apache::URI2param is distributed along with CGI::URI2param.

uri2param($req,\%regexs)

$req has to be some sort of request object that supports the method param, e.g. the object returned by CGI->new() or by Apache::Request->new().

\%regexs is hash containing the names of the parameters as the keys, and corresponding regular expressions, that will be applied to the URL, as the values.

   %regexs=(
            id    => 'id(\d+)\.html',
            style => 'st_(fancy|plain)',
            order => 'by_(\w+)',
           );

You should add some capturing parentheses to the regular expression. If you don't do, all the buzz would be rather useless.

uri2param won't get exported into your namespace by default, so you have to either import it explicitly

 use CGI::URI2param qw(uri2param);

or call it with it's full name, like so

 CGI::URI2param::uri2param($r,$regex);

What's the difference to mod_rewrite ?

Basically noting, but you can use CGI::URI2param if you cannot use mod_rewrite (e.g. your not running Apache or are on some ISP that doesn't allow it). If you can use mod_rewrite you maybe should consider using it instead, because it is much more powerfull and possibly faster. See mod_rewrite in the Apache Docs (http://www.apache.org)

INSTALLATION ^

 perl Build.PL
 ./Build
 ./Build test
 sudo ./Build install

BUGS ^

None so far.

Please report any bugs or feature requests to bug-cgi-uri2param@rt.cpan.org, or through the web interface at http://rt.cpan.org. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

TODO ^

Implement options (e.g. do specify what part of the URL should be matched)

REQUIRES ^

A module that supplies some sort of request object is needed, e.g.: Apache::Request, CGI

SEE ALSO ^

Apache::URI2param

AUTHOR ^

Thomas Klausner, domm@cpan.org, http://domm.plix.at

Thanks Darren Chamberlain <dlc@users.sourceforge.net> for the idea to write a mod_perl handler for CGI::URI2param

COPYRIGHT & LICENSE ^

Copyright 2001, 2002, 2006 Thomas Klausner, All Rights Reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

syntax highlighting: