1er script Perl taille d'un tableau

1er script Perl taille d'un tableau - Perl - Programmation

Marsh Posté le 28-06-2007 à 16:29:54    


Bonjour  
 
J'ai reçu un script Perl, langage dans lequel je n'ai jamais programmé. après quelquues petites lectures, j'ai à peu près compris mais il y a nnéamoins quzlque chose qui cloche.
 
Je vais copier ici juste la partie concernant la création des données ,
 
script.pl  

#!/usr/bin/perl -w
 
 
 
print("----------------------debut script---------------------\n" );
 
 
 
$out_dir = "";
 
@dirs = ();
 
@instances = ();
 
@outprefix = ();
 
@prefix = ();
 
@tests = ();
 
$file = $ARGV[0];
 
open(CONF, "<$file" ) or die "Error: $file not found\n";
 
$buffer = "";
 
while($line = <CONF> ) {
 
    $buffer .= $line;
 
}
close CONF;
 
eval $buffer;
 
print("buffer : \n $buffer\n" );
print("#test =$#$tests\n" );
print("#test[0]=$#{$tests[0]}\n" );

le fichier de configuration attsurf.conf est le suivant :  
 
$out_dir = "/home/huynh/plot_eaf/out/";
@dirs =("/home/huynh/plot_eaf/input1/",
        "/home/huynh/plot_eaf/input2/" );
@instances = (
              "eva_50x10_1"
      );
@outprefix = ("1phero_scratch","1phero_TF" );
@prefix= ("*scratch*","scratch","*TF*","TF" );
@tests = (
  ["*scratch","1pheroS","*TF","1pheroTF"]
  );

 
et voici ce que j'obtiens dans ma fenêtre de terminal  ce que je ne comprends pas, c'est la valeur -1 que j'obtiens dans la ligne en gras, c'est à dire la valeur de $#$tests  dans mon esprit cette valeur devrait être 1 :  
 
huynh@huynh:~/plot_eaf$ perl script.pl attsurf.conf
Name "main::outprefix" used only once: possible typo at script.pl line 8.
Name "main::dirs" used only once: possible typo at script.pl line 6.
Name "main::out_dir" used only once: possible typo at script.pl line 5.
Name "main::instances" used only once: possible typo at script.pl line 7.
Name "main::prefix" used only once: possible typo at script.pl line 9.
----------------------debut script---------------------
buffer :  
 $out_dir = "/home/huynh/plot_eaf/out/";
@dirs =("/home/huynh/plot_eaf/input1/",
        "/home/huynh/plot_eaf/input2/" );
@instances = (
              "eva_50x10_1"
             );
@outprefix = ("1phero_scratch","1phero_TF" );
@prefix= ("*scratch*","scratch","*TF*","TF" );
@tests = (
  ["*scratch","1pheroS","*TF","1pheroTF"]
         );
 
#test =-1
#test[0]=3

 
Je vous remercie d'avance et m'excuse pour la question pê stupide d'un super débutant en Perl

Reply

Marsh Posté le 28-06-2007 à 16:29:54   

Reply

Marsh Posté le 28-06-2007 à 16:54:02    

oulalala ... y'a plein de trucs qui vont pas du tout :o

  • "use strict;" obligatoire en debut de script quand on débute ( et même après), rien que cela t'aurait orienté pour trouver ton problème
  • on utilise "my" pour déclarer une variable
  • la différence entre @tab et $#tab: $#tab te retourne la position du dernier element d'un tableau ( par exemple 0 quand il y a un seul élément dans le tableau) tandis que @tab, utilisé dans un contextescalaire, te retourne la taille du tableau. Je te conseille la lecture de: http://perldoc.perl.org/perldata.html
  • les références en perl, hop: http://perldoc.perl.org/perlref.html
  • "Eval is evil", je te deconseille fortement de t'en servir, surtout si tu débutes.

Reply

Marsh Posté le 05-07-2007 à 10:05:13    

Et plutôt que de faire un read sur le fichier de conf, fait un inclure ou require (voir use, mais revoir le format)

Reply

Sujets relatifs:

Leave a Replay

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