DBD::Mysql DBI CGI vs Script

DBD::Mysql DBI CGI vs Script - Perl - Programmation

Marsh Posté le 31-08-2006 à 20:19:29    

Bonjour a tous,
 
J'ai un probleme mystique :  
J'ai un module perl qui fait des trucs :
 - Session Telnet
 - Session FTP
 - Session Mysql
 
En gros un s'est un truc qui fait des operations repetitives sur plusieurs machnines en meme temps. Bref tout ca est orchestre par des donnees dans une base Mysql.
 
Le gros du code est dans un modules (tout objet) pour etre appele aussi bien par script que par un cgi.
 
Dans l'ensemble ca fonctionne bien. Le truc doit faire une 50aine de requetes...
Et pour une seule de ces requetes

$sth->fetchall_arrayref

me renvoit :
 - undef en CGI
 - la bonne valeur en script.
 
Je precise j'ai seule ligne de code dans le script et le cgi. Pas de message d'erreur... rien.
Je comprends pas...


---------------
Cdl, Danjer
Reply

Marsh Posté le 31-08-2006 à 20:19:29   

Reply

Marsh Posté le 01-09-2006 à 09:31:31    

et le `$sth->execute' précédent marche bien ?


---------------
TriScale innov
Reply

Marsh Posté le 01-09-2006 à 09:44:59    

franceso a écrit :

et le `$sth->execute' précédent marche bien ?


Ouais... Alors en fait j'ai compris...
 
le code fait un truc du genre :

Code :
  1. if ($chaine =~ /(\d+)-(\d+)/) {
  2.   $obj->ma_methode_qui_tue($1,$2);
  3. }


 
Conclusion :
 - En script ca marche
 - En cgi ca marche pas. ($1,$2) ne passe pas bien... pourtant si je les affichent j'ai bien les bonnes valeurs. Les valeurs de $1 et $2 se perdent...
 

Code :
  1. if ($chaine =~ /(\d+)-(\d+)/) {
  2.   my $var1=$1;
  3.   my $var2=$2;
  4.   $obj->ma_methode_qui_tue($var1,$var2);
  5. }


 
La ca marche dans les deux cas cgi et script. En fait la methode que j'appelle n'existe pas elle est gere par AUTOLOAD:

Code :
  1. sub AUTOLOAD {
  2.   my $self = shift;
  3.   my $name = '';
  4.   if ($AUTOLOAD =~ /^.*?::(.*)$/) {
  5.     $name = $1;
  6.   }
  7.   my $hash_mode = 0;
  8.   if ($name =~ /_hash$/i) {
  9.     $hash_mode = 1;
  10.     $name =~ s/_hash$//i;
  11.   }
  12.   if ($name =~ /_shash$/i) {
  13.     $hash_mode = 2;
  14.     $name =~ s/_shash$//i;
  15.   }
  16.   if (defined $self->{sql}->{$name}) {
  17.     if ($name =~ /^insert/i or $name =~ /^update/i) {
  18.       return $self->dbexecute_insert($name, @_);
  19.     } else {
  20.       if ($hash_mode) {
  21. return $self->dbexecute_hash($hash_mode,$name, @_);
  22.       } else {
  23. return $self->dbexecute($name, @_);
  24.       }
  25.     }
  26.   }
  27. }


 
J'ai l'impression que c'est ca qui fait que je perd les valeurs de $1 et $2... Mais j'ai que des suppositions pas de cetitude.


---------------
Cdl, Danjer
Reply

Marsh Posté le 01-09-2006 à 09:52:29    

Danjer a écrit :

le code fait un truc du genre :

Code :
  1. if ($chaine =~ /(\d+)-(\d+)/) {
  2.   $obj->ma_methode_qui_tue($1,$2);
  3. }



effectivement, j'ai déjà rencontré des problèmes de ce genre et j'ai pris l'habitude de toujours recopier les $1, $2, ... dans des variables locales avant de les utiliser.
 
Mais ça n'explique quand même pas pourquoi ça foire en CGI et pas en script. :??:


---------------
TriScale innov
Reply

Marsh Posté le 01-09-2006 à 10:41:02    

franceso a écrit :

effectivement, j'ai déjà rencontré des problèmes de ce genre et j'ai pris l'habitude de toujours recopier les $1, $2, ... dans des variables locales avant de les utiliser.
 
Mais ça n'explique quand même pas pourquoi ça foire en CGI et pas en script. :??:


 
C'est peut-etre AUTOLOAD qui a un namespace particulier... Mais je comprends pas.


---------------
Cdl, Danjer
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed