OVH Cloud OVH Cloud

probleme d'ecriture je pense...

4 réponses
Avatar
Fabrice L.
Bonjour,

La panne de mon pressoir a orange doit etre à l'origine de mon probleme pour
lequel la solution va etre tellement evidente que qd je serai reveillé je
trouverai la solution meme sans regarder.

En attendant, je suis coincé...

@table1 = ('bla','ble','bli','blo',blu');
@table2 = ('ble','bla','bli','blu','blo');
@table3 = ('bla','ble','bli','bli','bla');
@table4 = ('bla','blo','blu','bla','ble');

print @table1[1]; ##<== no pb ici

maintenant via une boucle, je veux afficher les premieres valeurs de chaque
table.

for (1..4) {
print @table$_[1]; ## produit invariablement une erreur 500
}

une idée ?

Fab

4 réponses

Avatar
Régis Caspar
Fabrice L. wrote:
for (1..4) {
print @table$_[1]; ## produit invariablement une erreur 500
}

une idée ?


Bonjour,

Vous pouvez utiliser un eval :
print eval("$table$_" . '[1]') . "n" for (1..4);

--
Régis Caspar

Avatar
Nicolas George
"Fabrice L." wrote in message
<420b371e$0$6593$:
print @table1[1]; ##<== no pb ici


Si, problème.

Scalar value @table1[1] better written as $table1[1]

Toujours utiliser use warnings.

print @table$_[1]; ## produit invariablement une erreur 500


Ma boule de cristal me montre que « erreur 500 » veut dire que c'est un CGI
ou similaire. Un des résultats est que les messages d'erreur utiles de perl
partent quelque part dans les logs. Où il faut aller les chercher.

Ici, un perl -c aurait fait l'affaire :

Scalar found where operator expected at - line 1, near "@table$_"
(Missing operator before $_?)

Traduction : il y a un identificateur, @table, il y a un autre
identificateur, $_, et rien entre les deux, ça ne veut rien dire.


une idée ?


Lire les messages d'erreur. Lire perlreftut. Utiliser un un tableau de
tableaux.

Avatar
Paul Gaborit
À (at) Thu, 10 Feb 2005 11:31:42 +0100,
"Fabrice L." écrivait (wrote):
for (1..4) {
print @table$_[1]; ## produit invariablement une erreur 500
}


La "mauvaise" solution :

for (1..4) {
print ${"table$_"}[1];
}

("mauvaise" solution car elle n'est pas autorisée si on utilise "use strict;"
et parce que personne ne devrait faire de script conséquent sans utiliser "use
strict;".)

Une solution propre (en conservant les mêmes tableaux):

foreach (@table1, @table2, @table3, @table4) {
print $_->[1];
}

--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
Fabrice L.
Bonsoir,

merci a tous pour vos solutions, j'ai finimement opté pour la solution de
Nicolas cad un tableau de tableau.

Merci a tous pour vos contributions.

Fabrice

"Fabrice L." a écrit dans le message de
news:420b371e$0$6593$
Bonjour,

La panne de mon pressoir a orange doit etre à l'origine de mon probleme
pour

lequel la solution va etre tellement evidente que qd je serai reveillé je
trouverai la solution meme sans regarder.

En attendant, je suis coincé...

@table1 = ('bla','ble','bli','blo',blu');
@table2 = ('ble','bla','bli','blu','blo');
@table3 = ('bla','ble','bli','bli','bla');
@table4 = ('bla','blo','blu','bla','ble');

print @table1[1]; ##<== no pb ici

maintenant via une boucle, je veux afficher les premieres valeurs de
chaque

table.

for (1..4) {
print @table$_[1]; ## produit invariablement une erreur 500
}

une idée ?

Fab