[Perl Tk] Taille d'un tableau renvoyé.
Bonjour.
Je rencontre le problème dans Perl Tk, mais c'est peut-être plus général.
La méthode tagRanges("sel") du widget Text renvoie une liste (autrement dit un tableau, à moins qu'il n'y ait entre les listes et les tableaux une différence qui m'échappe) d'indices.
J'aurais besoin de connaître la taille de ce tableau. (Cette taille est égale au double du nombre des parties séparées du texte qui sont sélectionnées).
Pour connaître la taille d'un tableau nommé, par exemple @tableau, Holzner, p. 88, donne 4 façons :
1° $#tableau + 1 (renvoie la taille du tableau);
2° scalar(@tableau) (renvoie la taille du tableau);
3° @tableau + 0 (renvoie la taille du tableau);
4° my $taille = @tableau (met dans $taille la taille du tableau)
Il me semble évident que 1° ne peut pas être étendu à un tableau non nommé.
J'ai essayé d'imiter 2° de la façon suivante :
Code:
1 2
|
$monWidgetTexte->messageBox( -message => scalar($monWidgetTexte->tagRanges("sel") )) |
mais le résultat est incorrect : c'est le tableau lui-même qui s'affiche, et non sa taille.
Si on essaie d'imiter 3° de la façon suivante :
Code:
1 2
|
$monWidgetTexte->messageBox( -message => $monWidgetTexte->tagRanges("sel") + 0) |
c'est un nombre qui s'affiche, mais pas le bon.
Ce qui m'étonne vraiment, c'est que l'application de 4° que voici :
Code:
1 2 3
|
my $taille = $monWidgetTexte->tagRanges("sel");
$monWidgetTexte->messageBox( -message => $taille); |
ne fonctionne pas non plus comme souhaité : cela n'affiche pas la taille, mais tout le tableau.
Finalement, la seule méthode correcte que j'aie trouvée est :
Code:
1 2 3
|
my @liste = $monWidgetTexte->tagRanges("sel");
$monWidgetTexte->messageBox( -message => scalar(@liste) ); |
Pourtant, cette méthode ne me satisfait pas, parce que je supose que la première des deux instructions provoque une copie du tableau (ou de la liste), qui risque d'être volumineux.
Quelqu'un voit-il une meilleure méthode ?
Merci d'avance.
M.