Taille d'un tableau anonyme ?

Le
ctemp1
Bonjour, j'ai trouvé la réponse à ma question sur un forum anglophone
mais ça ne marche pas.

Je souhaite passer un paramètre dans une fonction qui est la taille de
tableaux anonymes d'une référence de tableau.

Ex : $tableau[ [1, 2, 3], [5, 8, 4], ];

J'ai essayé 2 manières :

print @{$tableau->[0]};
print @{@{$tableau}[0]};

Mais dans les deux cas, j'ai un affichage des élements du tableau et
non la taille.

De la même manière j'ai essayé avec un hash anonyme et
@{%$tableau->[0]} avec le même résultat.

Merci si vous pouvez m'éclairer.

C. Tobini
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Laurent Wacrenier
Le #431989
C. Tobini
Bonjour, j'ai trouvé la réponse à ma question sur un forum anglophone
mais ça ne marche pas.

Je souhaite passer un paramètre dans une fonction qui est la taille de
tableaux anonymes d'une référence de tableau.

Ex : $tableau[ [1, 2, 3], [5, 8, 4], ];

J'ai essayé 2 manières :

print @{$tableau->[0]};
print @{@{$tableau}[0]};

Mais dans les deux cas, j'ai un affichage des élements du tableau et
non la taille.


print a un contexte de list.
print scalar @{$tableau->[0]};


De la même manière j'ai essayé avec un hash anonyme et
@{%$tableau->[0]} avec le même résultat.


Heu... avec une liste ?

Paul GABORIT
Le #431988
À (at) 9 Apr 2004 06:31:40 -0700,
(C. Tobini) écrivait (wrote):
Bonjour, j'ai trouvé la réponse à ma question sur un forum anglophone
mais ça ne marche pas.


Ça, c'est de la réponse ;-)

Je souhaite passer un paramètre dans une fonction qui est la taille de
tableaux anonymes d'une référence de tableau.

Ex : $tableau[ [1, 2, 3], [5, 8, 4], ];


Heu ?
Disons:
$tableau = [ [1, 2, 3], [5, 8, 4, 4], ];

J'ai essayé 2 manières :

print @{$tableau->[0]};
print @{@{$tableau}[0]};


print scalar(@{$tableau->[0]}), "n";
print scalar(@{$tableau->[1]}), "n";

Ça devrait le faire (afficher 3 puis 4). Le truc réside donc dans
l'utilisation de 'scalar'.

On peut aussi utiliser :

print
"Le tableau 0 contient @{[scalar(@{$tableau->[0]})]} elementsn";

Mais c'est plus lourd ;-).

--
Paul Gaborit - Perl en français -
ctemp1
Le #431634
Merci à tous pour vos réponses (qui se recoupent un p'tit peu, normal
:-) )

Ca marche parfaitement.

Une dernière petite question sur le sujet, bien que :
@{$tableau->[0]};
N'affiche pas la taille (j'ai bien compris que c'est un contexte de
liste), en voulant concaténer les différents éléments avec un espace
me renvoie en revanche la taille du tableau...

ex : @{$tableau->[0]}." ";

Là j'avoue que je ne comprend pas le rapport !
Laurent Wacrenier
Le #431633
C. Tobini
Une dernière petite question sur le sujet, bien que :
@{$tableau->[0]};
N'affiche pas la taille (j'ai bien compris que c'est un contexte de
liste), en voulant concaténer les différents éléments avec un espace
me renvoie en revanche la taille du tableau...

ex : @{$tableau->[0]}." ";

Là j'avoue que je ne comprend pas le rapport !


La concaténation force le conexte scalaire.

Paul GABORIT
Le #431627
À (at) 13 Apr 2004 08:07:32 -0700,
(C. Tobini) écrivait (wrote):
Une dernière petite question sur le sujet, bien que :
@{$tableau->[0]};
N'affiche pas la taille (j'ai bien compris que c'est un contexte de
liste), en voulant concaténer les différents éléments avec un espace
me renvoie en revanche la taille du tableau...

ex : @{$tableau->[0]}." ";

Là j'avoue que je ne comprend pas le rapport !


Comme son nom l'indique le "con-texte" n'est pas le texte lui-même mais ce
qu'il y a autour. C'est donc vous (le programmeur) qui fixez le contexte.

Or l'opérateur . (point) fixe un contexte scalaire à ses opérateurs. Donc
@{$tableau->[0]} est évalué dans un contexte scalaire et renvoie par
conséquent son nombre d'éléments.

--
Paul Gaborit - Perl en français -
ctemp1
Le #431626
La concaténation force le contexte scalaire.


Très bien, c'est bon à savoir.

A noter que je me serais tout de même fait taxer de bricolage si
j'avais concaténé pour renvoyer la taille du tableau :-)

Merci beaucoup à tous pour vos réponses.

C. Tobini

Publicité
Poster une réponse
Anonyme