Perl Heredoc
id : nz3nzjini4
category : computer
blog : perl
created : 03/04/10 - 12:21:56

Here is a simple exemple of sub usage using a perl heredoc :

.01sub usage {
.02    my $binary = shift;
.03
.04    my $basename = basename($binary);
.05
.06    #Here begin usage heredoc
.07    warn << "END_USAGE_HD";
.08Usage : $basename
.09Options :
.10    -l <address> : Listen on adress
.11    -p <port> | default $DEFAULT_PORT : Listen on port
.12    -b default on : launch deamon in background
.13    -v default off : Mode verbose
.14    -V : $basename version
.15END_USAGE_HD
.16}


    • Use double quotes to interpolate vars
    • Use simple quote to not interpolate vars

Perl [cgi-bin] GET method
id : acofpjsaru
category : computer
blog : perl
created : 03/04/10 - 12:21:05

Passage d'argument dans l'adresse

Dans cet exemple les arguments sont passés directement dans l'adresse, prenons par exemple l'adresse suivante :
http://www.chaosisme.com/nano_blog_html_view_article.cgi?blog_name=unixlinux&article=2

Les argument à récuprer sont :
    • blog_name (avec la valeur unixlinux)
    • article (avec la valeur 2)

Script nano_blog_html_view_article.cgi

Voici donc le début du code du script Script nano_blog_html_view_article.cgi permettant de récupérer ces variables en G
ET

Les actions réalisées sont les suivantes :
    • Récuperer la chaine "?blog_name=unixlinux&article=2"e
    • Split la chaine pour obtenir deux chaines disctinte "blog_name=unixlinux" "article=2"
    • Pousser les valeures dans une hash table

Voici le code permettant de réaliser ces actions :n
.01#!/usr/bin/perl
.02
.03local ($buffer, @pairs, $pair, $name, $value, %FORM);
.04# Read in text
.05$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
.06if ($ENV{'REQUEST_METHOD'} eq "GET") {
.07  $buffer = $ENV{'QUERY_STRING'};
.08}
.09# Split information into name/value pairs
.10@pairs = split(/&/, $buffer);
.11foreach $pair (@pairs){
.12  ($name, $value) = split(/=/, $pair);
.13  $value =~ tr/+/ /;
.14  $value =~ s/%(..)/pack("C", hex($1))/eg;
.15  $FORM{$name} = $value;
.16}
.17$blog_name = $FORM{blog_name};
.18$article  = $FORM{article};
.19
.20print $blog_name."\n";
.21print $article."\n";


Utilisation d'un librairie pour les requêtes POST

Il peut être également interessant d'utiliser une libraire afin d'éviter le codage d'une fonction permettant de décod
der les champs envoyés en POST.

Il existe pour cela une librairie perl nommé URI::Escape

Elle est displonible à cette adresse !

Amusez vous bien !