[perl] formulaire

formulaire [perl] - Perl - Programmation

Marsh Posté le 03-06-2008 à 12:28:27    

J'ai récupéré une page web qui contient un formulaire, j'ai fais quelques recherches concernant le HTTP::FORM, mais je n'ai pas tout compris...
 
est ce que quelqu'un sait comment récupérer les données du formulaire, les mettre dans une variable afin de pouvoir l'utiliser apres ?

Reply

Marsh Posté le 03-06-2008 à 12:28:27   

Reply

Marsh Posté le 03-06-2008 à 13:20:29    

Je ne connais pas HTTP::FORM, de mon côté j'utilise surtout CGI :
http://search.cpan.org/~lds/CGI.pm-3.37/CGI.pm

Reply

Marsh Posté le 03-06-2008 à 14:16:17    

ça existe pas http::form ...  
 
A la limite il y a bien http::Request::form , mais comme le disait Elmoricq je pense que tu devrais utilisé CGI ( et param ).


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 03-06-2008 à 15:39:13    

Code :
  1. if ((@$_[6] >= $warningValue) && (@$_[6] < $criticalValue) ) {
  2. MIME::Lite->send("smtp", $ServeurSMTP, Timeout=>60);
  3.  my $msg = new MIME::Lite
  4.             From    =>$mailfrom,
  5.             To      =>$mailto,         
  6.             Subject =>'ATTENTION',
  7.             Type    =>'TEXTE', 
  8.             Data    =>"petit test... réalisé par No Future ! Attention vous avez atteint le niveau d'alerte actuellement de 75%! Votre pourcentage de licence utilisé est de : @$_[6] %";
  9.  $msg -> send;
  10. }
  11. elsif ( @$_[6] >= $criticalValue ) {
  12. MIME::Lite->send("smtp", $ServeurSMTP, Timeout=>60);
  13.  my $msg = new MIME::Lite
  14.             From    =>$mailfrom,
  15.             To      =>$mailto,         
  16.             Subject =>'ATTENTION',
  17.             Type    =>'TEXTE', 
  18.             Data    =>"petit test... réalisé par No Future ! Attention vous avez atteint le niveau critique actuellement de 9O%! Votre pourcentage de licence utilisé est de : @$_[6] %";
  19.  $msg -> send;
  20. }


 
pouvez vous me dire si la syntaxe est correct s'il vous plait ?  
les variables $warningValue et $criticalValue proviennent d'une fonction qui les retournes ...

Reply

Marsh Posté le 03-06-2008 à 15:52:05    

est ce que quelqu'un peut me corriger s'il vous plait ???
 
 
 
my $warningValue;
my $criticalValue;
&variables_formulaire($warningValue, $criticalValue);  
if (@$_[6] != $warningValue) {
  MIME::Lite->send("smtp", $ServeurSMTP, Timeout=>60);
  my $msg = new MIME::Lite  
            From    =>$mailfrom,  
            To      =>$mailto,            
            Subject =>'ATTENTION',
            Type    =>'TEXTE',    
            Data    =>"petit test... réalisé par No Future ! Attention vous avez atteint le niveau d'alerte actuellement de 0%! Votre pourcentage de licence utilisé est de : @$_[6] %";
  $msg -> send;}
 

Reply

Marsh Posté le 03-06-2008 à 16:32:12    

Tout d'abord toujours mettre la ligne suivante au début de chaque script:

Code :
  1. use strict;


Ce qui te permettra déjà d'obtenir les warnings ( ici sur la non-définition de différentes variables).

 

Ensuite pour te "corriger" il faudrait déjà avoir une idée de ce qui ne va pas ( et accèssoirement de ce que fait "variables_formulaire" )


Message édité par anapajari le 03-06-2008 à 16:32:19

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 03-06-2008 à 16:58:47    

en fait, ma fonction, recupérère deux valeurs d'un formulaire. Qui sont deux chiffres... et les retourne a la fin,
 
je vous mettrai le code si besoin est... mais la je dois rentrer...

Reply

Marsh Posté le 03-06-2008 à 19:09:05    

pour la fonction j'ai trouvé, j'etais un peu loin de la vérité...

Reply

Marsh Posté le 03-06-2008 à 19:47:25    

my $warningValue;  
my $criticalValue;  
&variables_formulaire(\$warningValue, \$criticalValue);  
Tes variables sont passées par référence, et sont donc modifiées au retour de l'appelante. Par contre, il te faudra modifier le corps de ta procédure variables_formulaire, et utiliser la notation $$variable à la place de $variable pour les deux paramètres.
A+,


Message édité par gilou le 03-06-2008 à 19:48:19

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 04-06-2008 à 11:15:37    


Voici, ce que j'ai mis en code dans tab.pl... là où il j'appelle la fonction variables_formulaire...
Les sub higherLevel... me permettre de résoudre ce probleme :

Can't use string ("
<!-- Added for UTF-8 page enco" ) as an ARRAY ref while "strict refs" in use at tab.pl line
 84.

 
 

Code :
  1. sub higherLevel(\@)
  2.   {
  3.   my(@alerte) = @{(shift)};
  4.   showArray(@alerte);
  5.   }
  6. sub showArray(\@)
  7.   {
  8.   my(@alerte) = @{(shift)};
  9.   my($temp);
  10.   foreach $temp (@alerte) { print "$temp\n"; }
  11.   }
  12. my @alerte = &variables_formulaire();
  13. higherLevel(@alerte);
  14. my $warningValue = $alerte[0];
  15. my $criticalValue = $alerte[1];
  16. if (@$_[6] != $alerte[0]->[0]) {


 
 
ce code ci, est la fin de ma fonction, ou procedure, variables_formulaire...
j'ai rajouté les $$ comme tu m'as dit... sauf dans "my" sinon ça marchait pas...
 mais j'ai cette erreur là :
Can't use string ("75" ) as an ARRAY ref while "strict refs" in use at tab.pl line 74.
 
 

Code :
  1. my $warningValue;
  2. my $criticalValue;
  3. $_ = $response->content;
  4. m/<input.*?name="thresholdLicenseUsageWarning".*?value="(.*?)"/si;
  5. $$warningValue = $1;
  6. m/<input.*?name="thresholdLicenseUsageCritical".*?value="(.*?)"/si;
  7. $$criticalValue = $1;
  8. print "le niveau d'alerte est a : ".$$warningValue." %\n";
  9. print "le niveau critique est fixe a : ".$$criticalValue." %\n";
  10. print "\n\n";
  11.  
  12.    return ($$warningValue,$$criticalValue);


 
je cherche mais ne trouve pas comment, résoudre ce problème.
 
Gilou, j'ai testé le code que tu m'as donné  

Code :
  1. my $warningValue; 
  2. my $criticalValue; 
  3. &variables_formulaire(\$warningValue, \$criticalValue);


 
mais j'ai l'erreur, avec UFT-8...

Reply

Marsh Posté le 04-06-2008 à 11:15:37   

Reply

Marsh Posté le 04-06-2008 à 11:59:46    

Comme je te l'ai déja dit, il faut vraiment que tu apprennes le perl.
Programmer a l'aveuglette comme tu le fais, ca fait qu'au final tu passes des semaines sur quelque chose qui ne devrait prendre que quelques heures.
 
Si je comprends vaguement quelque chose ici, ca devrait être le corps de la procedure variables_formulaire que tu donnes:

Citation :

my $warningValue;
my $criticalValue;
$_ = $response->content;
m/<input.*?name="thresholdLicenseUsageWarning".*?value="(.*?)"/si;
$$warningValue = $1;
m/<input.*?name="thresholdLicenseUsageCritical".*?value="(.*?)"/si;
$$criticalValue = $1;
 
 
print "le niveau d'alerte est a : ".$$warningValue." %\n";
print "le niveau critique est fixe a : ".$$criticalValue." %\n";
print "\n\n";
 
 
   return ($$warningValue,$$criticalValue);


 
Bon, c'est bien sur faux.
 
En entrée on a quoi? $response->content
En sortie on a $warningValue, et $criticalValue.
 
Donc déja, la procédure va prendre $response->content en entré, les effets de bord, c'est mal, quand il n'y a aucune raison spécifique a leur emploi.
Et elle va donner $warningValue, et $criticalValue en sortie.
 
$response->content  est relativement gros, donc on va le passer par reference:  
variables_formulaire(\$response->content, ...)
Pour $warningValue, et $criticalValue qui sont de petites valeurs numeriques, un passage par copie n'est pas couteux.
Donc on peux soit les passer par reference:
my ($warningValue, $criticalValue);  
variables_formulaire(\$response->content,  \$warningValue, \$criticalValue);  
soit les recuperer par copie au retour de la procedure:
my ($warningValue, $criticalValue) = variables_formulaire(\$response->content);
cette seconde methode est plus nette dans ce cas, et je vais la choisir.
Ca donne alors:

Code :
  1. sub variables_formulaire {
  2. #peut être y a t'il des choses avant vu que dis que c'est la fin de la procedure
  3. my ($warningValue, $criticalValue);
  4. my $data = shift;
  5. $$data =~ m/\<input.*?name=\"thresholdLicenseUsageWarning\".*?value=\"([^"]+)\"/si;
  6. $warningValue = $1;
  7. $$data =~ m/\<input.*?name=\"thresholdLicenseUsageCritical\".*?value=\"([^"]+)\"/si;
  8. $criticalValue = $1;
  9. print "le niveau d'alerte est a : ".$warningValue." %\n";
  10. print "le niveau critique est fixe a : ".$criticalValue." %\n";
  11. print "\n\n";
  12. return ($warningValue, $criticalValue);
  13. }


 
Tes expressions reguliereres etaient totallement fausses, vu l'emploi direct de caracteres qui ont un sens spécial dans les expressions regulieres comme < ou ".
Enfin, ce que tu voulais matcher par (.*?) c'est mauvais pour plusieurs raisons:  
*? c'est *, le ? est inutile ici. donc (.*?) ca fait (.*)
(.*?) va matcher tout sauf un \n. ca va donc matcher un "  (le fait de mettre un " apres le (.*?) ne joue pas ici: en perl, les expressions regulieres prennent le maximum de ce qu'elles peuvent. ca va donc matcher tout jusqu'au dernier " de $response->content  et non pas s'arreter au premier ". Pour s'arreter, il fut dire explicitement de matcher tout sauf un ", d'ou [^"]+

[^"]+ est plus efficace qu"un non-greedy match lorsqu'on s'arrete a la premiere rencontre du caractere "
 
A+,

Message cité 1 fois
Message édité par gilou le 04-06-2008 à 12:36:55

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 04-06-2008 à 12:00:44    

À ce stade, je ne saurais trop conseiller une étude intensive de la documentation librement disponible sur le site officiel de PERL : http://perldoc.perl.org


Message édité par Elmoricq le 04-06-2008 à 12:00:51
Reply

Marsh Posté le 04-06-2008 à 12:20:54    

gilou a écrit :

Enfin, ce que tu voulais matcher par (.*?) c'est mauvais pour plusieurs raisons:
*? c'est *, le ? est inutile ici. donc (.*?) ca fait (.*)
(.*?) va matcher tout sauf un \n. ca va donc matcher un "  (le fait de mettre un " apres le (.*?) ne joue pas ici: en perl, les expressions regulieres prennent le maximum de ce qu'elles peuvent. ca va donc matcher tout jusqu'au dernier " de $response->content  et non pas s'arreter au premier ". Pour s'arreter, il fut dire explicitement de matcher tout sauf un ", d'ou [^"]+
A+,


[:cupra] Y'a boulette dans l'explication là...

 

le ? après un quantifier (*,+, ?, {...}) transforme la recherche en "non-greedy" , il n'a pas le même sens que  derrière un autre caractère où il equivaut alors à {0,1} .

 

Donc ces regexs étaient bonnes :o ( mais les tiennes le sont également).
Mais il me semble dangereux de mettre un + car si le motif est value="" ça va rien matcher du tout.

Message cité 1 fois
Message édité par anapajari le 04-06-2008 à 12:21:27

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 04-06-2008 à 12:22:20    

ça veut dire quoi subroutine Undifine &main:: ... ?

Reply

Marsh Posté le 04-06-2008 à 12:32:07    

anapajari a écrit :


[:cupra] Y'a boulette dans l'explication là...
 
le ? après un quantifier (*,+, ?, {...}) transforme la recherche en "non-greedy" , il n'a pas le même sens que  derrière un autre caractère où il equivaut alors à {0,1} .  
 
Donc ces regexs étaient bonnes :o ( mais les tiennes le sont également).
Mais il me semble dangereux de mettre un + car si le motif est value="" ça va rien matcher du tout.

Certes, mais je connais ses données, et elle ne le teste pas de toute facon...
 
Pour le ?, oui, c'est juste, je n'emploie jamais ca ou presque, alors j'ai tendance a oublier (et a melanger cela avec la maniere dont ca marche dans les XML schémas) Mea Culpa [:sicarius] .
A+,

Message cité 1 fois
Message édité par gilou le 04-06-2008 à 13:39:37

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 04-06-2008 à 12:33:24    

yuxi a écrit :

ça veut dire quoi subroutine Undifine &main:: ... ?


Tu appelles un subroutine pas definie. Une histoire de nom ou de proto?
A+,


Message édité par gilou le 04-06-2008 à 12:33:41

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 04-06-2008 à 14:08:30    

gilou a écrit :

Certes, mais je connais ses données, et elle ne le teste pas de toute facon...


tout à fait, je donnais juste mon point de vue  :o

gilou a écrit :

Pour le ?, oui, c'est juste, je n'emploie jamais ca ou presque, alors j'ai tendance a oublier (et a melanger cela avec la maniere dont ca marche dans les XML schémas) Mea Culpa [:sicarius] .
A+,


C'est ballot, je trouve justement que c'est une des force des regexs PCRE par rapport aux POSIX, mais bon les goûts et les couleurs.


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 04-06-2008 à 14:33:44    

J'ai toujours eu l'impression que si le contexte a droite était compliqué, l'algo de match devenait beaucoup moins efficace, et comme dans une majorite de cas, il est facile de faire une expression reguliere greedy équivalente...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 04-06-2008 à 14:42:00    

Ah ben je l'utilise très souvent l'opérateur de gourmandise, moi, comme anapajari je trouve que c'est l'un des gros plus du PCRE.

Reply

Marsh Posté le 04-06-2008 à 15:19:08    

Can't use string ("
<!-- Added for UTF-8 page enco" ) as an ARRAY ref while "strict refs" in use at tab.pl line
 
ça veur dire quoi ça ? c'est un problème de reference...

Reply

Marsh Posté le 04-06-2008 à 15:23:33    

ça veut dire que tu passes une chaine de caractère à un endroit où il attend une référence sur un tableau!
Montre nous la ligne qui correspond à l'erreur.


Message édité par anapajari le 04-06-2008 à 15:24:01

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 04-06-2008 à 15:29:31    

#juste avant, j'ai l'appel de ma fonction, et dans le si, j'utilise une valeur de ma fonction.
 
if (@$_[6] < $warningValue) {

Reply

Marsh Posté le 04-06-2008 à 15:35:38    

a cet endroit dans ton script $_ n'est pas un tableau mais une chaine de caractère qui commence par "<!-- Added for UTF-8 page enco..." [:spamafote]

 

edit: au pif je dirais que c'est ton content


Message édité par anapajari le 04-06-2008 à 15:36:10

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 04-06-2008 à 15:42:38    

bizarre...

Reply

Marsh Posté le 04-06-2008 à 15:49:32    

Pas bizarre du rout:
if (@$_[6] != $alerte[0]->[0])  
@alerte est defini comme un tableau contenant deux valeurs qui sont des scalaires, c'est donc tres clair.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 04-06-2008 à 15:55:35    

nan pas bizarre ... $_ est une variable "générique" qui peut être modifiée par énormément de chose.
Tu as d'ailleurs un exemple dans la doc.
Par contre plutôt que d'utiliser local qui est une infamie, je te recommanderai de nommer ta variable à sa 1ere utilisation.
edit: ça plus  ce que dit Gilou :o


Message édité par anapajari le 04-06-2008 à 15:56:31

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 05-06-2008 à 11:57:54    

voici un message d'erreur :
 
Can't use an undefined value as a SCALAR reference at...
 

Reply

Marsh Posté le 05-06-2008 à 12:03:36    

Code :
  1. my $warningValue; 
  2. my $criticalValue; 
  3. &variables_formulaire(\$warningValue, \$criticalValue); 
  4. if (@$_[6] == $warningValue) {


 
voilà, lorsque je If (  @....) n'est pas là, L'appel de ma fonctionne fonctionne correctement, et m'affiche mes valeurs... Mais lorsque je raconte mon if(@...), il me met un message d'erreur... (mais j'en ai absoluement besoin, c'est pour envoyer mes mails...)
 
code d'erreur :

Code :
  1. le niveau d'alerte est a : 75 %
  2. le niveau critique est fixe a : 90 %
  3. Can't use string ("
  4. <!-- Added for UTF-8 page enco" ) as an ARRAY ref while "strict refs" in use at blabla.pl l
  5. ine 101.


 
la ligne 101 correspond au if.

Reply

Marsh Posté le 05-06-2008 à 13:45:36    

Tu comprends le message d'erreur et de quelle variable il se plaint?
Si oui, tu comprendras qu'on ne puisse repondre a ta question, vu l'insuffisance des informations que tu donnes.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 05-06-2008 à 13:48:25    

je ne comprend pas bien, non, sinon j'aurais peut etre pu le resoudre depuis, je l'ai cette erreur...et que j'en parle...

Reply

Marsh Posté le 05-06-2008 à 13:56:53    

gilou a écrit :

Pas bizarre du rout:
if (@$_[6] != $alerte[0]->[0])  
@alerte est defini comme un tableau contenant deux valeurs qui sont des scalaires, c'est donc tres clair.
A+,


C'est tout bien expliqué là ce qui ne va pas ...
 


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 05-06-2008 à 14:53:36    

Moi ça ne me parle pas...
 
et puis, j'ai testé le retour de mes variable avant le if, avec un print $$ ma variable, et cela fonctionne tres bien ! il me les affiches,
 
mais le IF... bah non, ça marche pas, j'ai remplacé ces variables par 0==0 et il me mais la même erreur pour une ligne plus bas où il y a:
 
my $msg = new MIME::Lite  
 
alors que ce code marchait tres bien avant...

Reply

Marsh Posté le 05-06-2008 à 15:09:40    

ce code ci fonctionne tres bien !
 

Code :
  1. my ($warningValue, $criticalValue) = variables_formulaire(); 
  2.  
  3. print $$warningValue.' '.$$criticalValue."\n";
  4. print "\n\n";
  5. my $var2 = $$criticalValue;
  6. my $var = $$warningValue ;
  7. my $var3 = "80";
  8. if ($var < $var3) {
  9.  print "le niveau critique $var est inferieur a $var3 ! \n\n"}
  10. else {
  11.  print "le niveau critique $var2 est superieur a $var3 ! \n\n"}


 
il m'affiche ceci :

Code :
  1. le niveau d'alerte est a : 75 %
  2. le niveau critique est fixe a : 90 %
  3. 75 90
  4. le niveau critique 75 est inferieur a 80 !


 
c'est bien ce que j'ai demandé avec les bonnes valeurs...
 
donc j'en conclu que c'est dans le mail... que ça ne marche pas...
 
donc je vous presente mon code pour le mail :
 

Code :
  1. if (@$_[6] == $var) {
  2.  MIME::Lite->send("smtp", $ServeurSMTP, Timeout=>60);
  3.  my $msg = new MIME::Lite
  4.             From    =>$mailfrom,
  5.             To      =>$mailto,         
  6.             Subject =>'ATTENTION',
  7.             Type    =>'TEXTE', 
  8.   Encoding =>'base64',
  9.             Data    =>"petit test... realise par No Future ! Attention vous avez atteint le niveau d'alerte actuellement de 0%! Votre pourcentage de licence utilise est de : @$_[6] %";
  10.  $msg -> send;
  11.  print "message bien envoye ! \n\n"}


 
voilà... j'ai en module :
 
use warnings;
use strict;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
use HTTP::Status;
use MIME::Lite;
use Encode;
 
merci d'essayer de trouver ce qui ne va pas !

Reply

Marsh Posté le 05-06-2008 à 15:13:48    

anapajari a écrit :


C'est tout bien expliqué là ce qui ne va pas ...
 

elle a modifié et teste sur un scalaire maintenant
if (@$_[6] == $warningValue)
ce qui est bon a priori
Donc je suppose que si le message d'erreur perdure avec un scalaire, c'est que @$_[6] n'est plus valable, mais comme on ne sait pas a ce stade comment est assigné $_, vu le petit bout de code ne donnant pas du tout le contexte, il n'y a pas de risque qu'on puisse repondre.
 
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 05-06-2008 à 15:18:10    

Citation :

my ($warningValue, $criticalValue) = variables_formulaire();  
 
print $$warningValue.' '.$$criticalValue."\n";

Sauf que si ca marche la, c'est que tu ne fais pas ce qu'il faut correctement dans variables_formulaire.
En effet, tu definis des scalaires.
Au retour de la fonction, ce devrait donc etre des scalaires et non pas des references sur des scalaires qui devraient etre retournés.
Comme je l'ai dit, sans voir plus de code...
A+,


Message édité par gilou le 05-06-2008 à 15:18:57

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 05-06-2008 à 15:30:18    

j'ai corrigé la syntaxe de min if, dans lequel il manquait des parenthèses...  
 

Reply

Marsh Posté le 05-06-2008 à 15:32:06    

les $$ d'apres les cours, déréférence.. et non référence...
 
sinon voici ce qu'il y avait avant :
 
   }
        if (/\<\/tr>/ and $startvector and not $endtable) {
            push @data, $vector;
            $startvector = 0;
        }
    }
}
 
foreach (@data) {
     
  print @$_[0],"  ",@$_[1],"  ",@$_[2],"  ",@$_[3],"  ",@$_[4],"  ",@$_[5],"  ",@$_[6],"\n";
  }
   
print "\n\n";
 
tu devrais reconnaître ce bout de code.

Reply

Marsh Posté le 05-06-2008 à 15:40:43    

Oui, mais une fois que tu es sortie de la boucle foreach (@data) {...}
$_ n'est plus en contexte, et donc @$_[0],...@$_[6], ne designent plus des expressions valides.
Copier coller un bout de code, c'est bien, mais encore faut il le comprendre.
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 05-06-2008 à 15:43:03    

Mais vire moi ces @ devant tes $_[.] !!!
A chaque itération du foreach, ton $_ est un pointeur sur un tableau .
Pour le déréférencer, il vaut mieux utiliser $ ( comme tu le dit toi même ) et non @.
Par ailleurs, je t'ai dit de nommer tes variables ça serait quand même plus clair!

Code :
  1. foreach my $v(@data){
  2.  print $$v[0], ..., $$v[6];
  3.  # autre écriture pour bien voir la référence:
  4.  print  $v->[0], ... , $v->[6];
  5. }


Message cité 1 fois
Message édité par anapajari le 05-06-2008 à 15:45:06

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 05-06-2008 à 15:43:20    

Citation :

les $$ d'apres les cours, déréférence.. et non référence...

Oui, mais quand on dereference quelque chose, encore faudrait il l'avoir defini comme une reference.
La, sans le code de variables_formulaire sous les yeux, personne ne peut savoir que tu as rempli $warningValue et $criticalValue par des references, surtout que dans ce contexte, ça ne s'impose pas.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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