Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I have to design a script, that is going to act as a sort of middle ware between users and a third party application. The third party application queries a series of databases, values are passed as key value pairs. My script must take user generated query string values, and generate a URL for the third party app. My question is useing the CGI module, is there a way I can deal with case sensitivity of values passes to my script, for example KEY=value and Key=value. Also is there a smart way to deal with all values passed in the query string, given that users can pass many different key value pairs. TIA

Replies are listed 'Best First'.
Re: CGI Design issues
by svenXY (Deacon) on Sep 24, 2008 at 10:05 UTC
    Hi,
    you can do all of this easily with perl/CGI. Working with many key=value pairs is usually handled by the param() method of CGI. Check the documentation there and the many examples you will find here regarding CGI (try Super Search).
    Regards,
    svenXY
Re: CGI Design issues
by wol (Hermit) on Sep 24, 2008 at 12:38 UTC
    If I understand you correctly, then you're middleware is attempting to translate a set of key/value pairs from the user into a URL which is passed to your third party app.

    I'll assume that the user input is pre-processed into a hash, and so you need to

    1. Strip out keys that have no meaning to the app
    2. Regularise the hash to ensure that the keys have the right case
    3. Turn it into a URL
    The following code does steps 1 and 2 in rapid succession:
    my %input = ( "NaMe" => "Fred", "iD" => "123", "PET" => "Cat", "spoon" => "garbage", ); my %caseCorrection = ( "name" => "Name", "id" => "ID", "pet" => "pet", ); my %output; %output = map { $caseCorrection{lc $_} => $input{$_} } grep { exists $caseCorrection{lc $_} } keys %input; my $getString = join ";", map { "$_=$output{$_}" } keys %output;
    The above doesn't handle:
    • Input keys which only differ by case. eg (id => 1, ID => 2)
    • Encoding significant characters in the URL, eg "=" -> "%61"
    Depending on what else is going on before this point, these may be non-issues.

    It now occurs to me that I've not used the CGI module anywhere. I hope I've been barking up the right tree...

    --
    .sig : File not found.