[Perl] problème de récursivité

problème de récursivité [Perl] - Perl - Programmation

Marsh Posté le 07-05-2004 à 15:03:38    

Voila j'ai le code suivant (c'est pas encore une version finale alors ya p-e 2-3 trucs pas très bo encore)
 

Code :
  1. sub ini {
  2.   my $file = new Bromont::File(shift);
  3.   if (! -e $file->name || ! -f $file->name) {
  4.     return;
  5.   }
  6.   return ini::parse_ini($file);
  7. }
  8. sub ini::parse_ini {
  9.   my $file = shift;
  10.   my $base_object_type = shift;
  11.   my @base_lines;
  12.   my @lines;
  13.   my @object;
  14.   my $object_type;
  15.   my $test = $base_object_type;
  16.   print "test1 " . $base_object_type . " " . \$base_object_type . "\n";
  17.   foreach ($file->lines) {
  18.     print "test2 " . $base_object_type . " " . \$base_object_type . "\n";
  19.     if (my $type = ini::is_new_object_line($_)) {
  20.       if (ini::is_base_object($object_type, $type)) {
  21.         if ($object_type) {
  22.           push(@object, ini::parse_ini((new Bromont::VFile(\@lines)), $object_type));
  23.         }
  24.       }
  25.       $object_type = $type;
  26.     }
  27.     else {
  28.       if ($base_object_type eq $object_type) {
  29.         push(@lines, $_);
  30.       }
  31.       else {
  32.         push(@base_lines, $_);
  33.       }
  34.     }
  35.   }
  36.   return create_object($base_object_type, \@base_lines, \@object);
  37. }


 
mon problème, c'est que mes 2 print sont différents, alors qu'ils devraient être identique. La référence de $base_object_type semble changer aussitot que j'entre dans mon foreach...
 


test1 port SCALAR(0x2010ef24)
test2  SCALAR(0x2010e9b4)


 
je comprends vraiment pas
 
 
merci

Reply

Marsh Posté le 07-05-2004 à 15:03:38   

Reply

Marsh Posté le 07-05-2004 à 17:10:29    

je sais pas trop pourkoi ca deconne, mais je trouve bizarre ta notation de sub avec des ::
 
en gros il va considerer que la sub parse_ini fait partie d'un package ini...
c'est chelou, et c'est peut etre de la que vient ton etrange probleme (syntaxe etrange => probleme etrange? c'est le "do what I mean"!)

Reply

Marsh Posté le 07-05-2004 à 17:49:42    

jpeux bien essayer, jai fait ca à quelques reprise et j'ai eu aucun probleme (mais sans récursivité par exemple)

Reply

Marsh Posté le 03-06-2004 à 08:34:50    

ben moi jsui nv donc deja bonjour a tous.
Voila mon probleme c ke mon maitre de stage ma demande de resoudre un probleme et de me servir de la recursivite.
Je ne sai pas ce ke c donc jai fait des recherches sur google et je n'ai pas trouver ce ke je chercher j'ai juste trouver des fonctions pour essayer de comprendre la chose main en vain.
voila le source a modifier:
#boucle de changement de 4 par 4
 $i = 0;
 $index = 0;
 $j = 0;
 while ($index < $vector_n)
 { $vector[$index] .= $seq[$j];
 }
 continue
 { $index = $index+1;
 
## essayer de transformer en f(i)
  $i = $i + 1;
  $j = int($i/$seq_n);
  if ($j == $seq_n) { $i = 0; $j = 0;}
 }
il faut que le j disparaise et kil ni ai plus que le i
j'ai essayer cela mais sa marche po :
 continue
 { $index = $index+1;
  $i = &calci_4($index , $seq_n , $i);  
 }
#################################################################################
#                    #
#              1.00    0206504  nico #
#                    #
# calci_4($index , $seq_n , $i)             #
#                    #
#it is a procedure in order to reduce the row of the code and this procedure  #
#is use in the boucle while to calculate the number of combinaison    #
#################################################################################
sub calci_4(i){
 my $index = 0;
 my $i = 0;
 if ($i<3)
 {  
  $i = int($index/$seq_n);
  calci_4( $i + 1);
  if ($i == $seq_n) { $i = 0; }  
 }
  return($i);
}
je sais je passe pour une quiche mai je sui en premiere anne de bts iris et je fais du c++ et la mon stage est en perl et je connais pas la recursiviter donc je galere.
merci d'avance de votre reponse ki meclairera je lespere

Reply

Marsh Posté le 03-06-2004 à 14:09:01    

svp jai besoin d'aide que quelqu'un prene le temp d'o moin menvoyer une reponse.

Reply

Marsh Posté le 03-06-2004 à 23:05:56    

1: post dans ton propre topic
 
2: mets ton code dans les balises code du forum, c'est pas lisible sinon


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 05-06-2004 à 18:27:51    

oki je vai le faire  
merci

Reply

Sujets relatifs:

Leave a Replay

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