Bonjour

J'utilise actuellement sur un de mes sites un captcha en php qui calcule la somme de deux nombres générés aléatoirement.

J'ai décidé de le réécrire en perl.

Voici les trois premières étapes:
  • Stocker des nombres dans un tableau
  • Extraire deux nombres aléatoire du tableau
  • Calcul de la somme des deux nombres

Voici le code en perl:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
#!/usr/bin/perl -w
 
# Don't forget chmod 755
 
use strict;                               
use warnings;                           
use CGI qw(:standard);      
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);  routine
 
# Security
$CGI::POST_MAX=1024*100;   # Max 100K posts
$CGI::DISABLE_UPLOADS=1;   # No upload
 
# Creating a new CGI object
my $cgi=new CGI;
 
&show_captcha;
 
sub show_captcha {
 
# Table of values
my @table=(2, 35, 15, 6, 40, 4, 8, 22, 11, 5, 32, 10, 1, 12, 26);
 
# Random extraction of two values of the table
my @rand_keys=rand @table[2];
 
# Question and sum of the two values
my $question='Please enter the result of the sum '.@table[@rand_keys[0]]. ' + '.@table[@rand_keys[1]].' (to avoid spam) = ';
 
print $cgi->header,              
      $question;
      $cgi->end_html;
En php, pour extraire aléatoirement deux nombres, je l'écris de cette façon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
$rand_keys = array_rand($table, 2);
Mais en perl, c'est un autre problème. En effet, lorsque je rafraîchis la page, uniquement le premier nombre est généré, le second est toujours égal à 2

Qu'en pensez-vous ?

Merci