Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Taille d'un tableau anonyme ?

6 réponses
Avatar
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

6 réponses

Avatar
Laurent Wacrenier
C. Tobini écrit:
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 ?

Avatar
Paul GABORIT
À (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 - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
ctemp1
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 !
Avatar
Laurent Wacrenier
C. Tobini écrit:
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.

Avatar
Paul GABORIT
À (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 - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>

Avatar
ctemp1
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