Perles de Perl
Contents
Accéder facilement aux paramètres de la Query string en CGI
Pour plus de confort, il est agréable de pouvoir accéder à tous les paramètres qui ont été passés en Query string (type /cgi-bin/monscript.cgi?param1=valeur¶m2=valeur) sous la forme d'un tableau de hachage. Pour ce faire, mettez ceci au début de votre script monscript.cgi :
if(length($ENV{'QUERY_STRING'}) > 0){
$buffer = $ENV{'QUERY_STRING'};
@pairs = split(/&/, $buffer);
foreach $pair (@pairs){
($name, $value) = split(/=/, $pair);
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$params{$name} = $value;
}
}Vos paramètres sont désormais accessibles via le hachage %params ($params{'param1'}, $params{'param2'} etc.).
Un équivalent du 'for i in ...' de Bash en Perl
Tout bon sysadmin ayant découvert la boucle for i in ... de Bash sait qu'il n'existe pas plus pratique et plus rapide pour exécuter des instructions en boucle. Les boucles de type "for" et "foreach" existent bien entendu en Perl, cependant leur syntaxe de base n'est pas aussi concise que celle de Bash. Il est tout de même possible d'écrire un équivalent à l'aide de l'opérateur qw afin d'éviter de devoir déclarer une liste temporaire pour l'occasion.
En Bash :
for i in tata titi toto tutu; do
echo $i
doneEn Perl, la manière "propre" (et donc, longue) :
my @liste = ("tata", "titi", "toto", "tutu");
foreach $i (@liste){
print "$i\n";
}En Perl, la manière courte :
foreach my $i (qw(tata titi toto tutu)){
print "$i\n";
}
Substitution "in place" à la sed en ligne de commande
marc@plop:~% cat uname.txt Linux plop 2.6.24-19-generic #1 SMP Wed Aug 20 22:56:21 UTC 2008 i686 GNU/Linux marc@plop:~% perl -pi -e 's/Linux/Linusque/g' uname.txt marc@plop:~% cat uname.txt Linusque plop 2.6.24-19-generic #1 SMP Wed Aug 20 22:56:21 UTC 2008 i686 GNU/Linusque
Pour créer une copie de l'original suffixée au passage, ajoutez le suffixe souhaité après l'option -i :
marc@plop:~% perl -pi.bak -e 's/Linux/Linusque/g' uname.txt
Cette commande modifiera le fichier uname.txt comme la précédente, en créant au préalable une copie du fichier uname.txt.bak ; vous pouvez suffixer la copie par ce que vous voulez, pas nécessairement .bak