OVH Cloud OVH Cloud

Perl et Structure

23 réponses
Avatar
gla
Bonjour,

En "C" on peut facilement définir des structures.

ex:
struct point3D
{
int x, y, z;
};


Et ensuite créer un tableau de cet élément là

ex:

struct point3D mespoints[64];


Comment on fait en Perl pour avoir un tableau de structure ?

3 réponses

1 2 3
Avatar
Jacques Caron
Salut,

On Wed, 07 Dec 2005 23:45:31 +0100, extense wrote:

Tout ca est bien gentil, je suis content de savoir qu'il existe il
multitude de façon de faire, mais j'aimerais bien qu'on m'en indique
juste "cool" une pour faire ca :

J'aimerai posséder un tableau unique pour contenir des choses diverses
sans avoir a gerer autant de tableau que de type d'élément.


Justement, en perl c'est facile alors qu'en C ça l'est beaucoup moins...
Un tableau peut contenir des scalaires (nombres, chaines...) ou des
références, et celles-ci peuvent être des références vers des scalaires,
des tableaux, des hashes, des fonctions... Et chaque élément peut être
différent (même si ce n'est pas forcément évident à gérer si on n'a pas un
moyen de savoir à quel type d'élément on a affaire).

Mon exemple était tres simple, j'ai des points 3D a stocker.


my @tableau = (
[1,2,3],
[4,5,6],
[0,0,0],
);

Et on y accède comme ça:

$tableau[$index][$coord]

Donc si on a ($x,$y,$z)=(0,1,2) alors

$tableau[$index][$x] fera ce qu'on pense que ça fait.

On peut aussi faire:

my @tableau = (
{ x => 1, y => 2, z => 3 },
{ x => 4, y => 5, z => 6 },
{ x => 0, y => 0, z => 0 },
);

Et on y accède comme ça:

$tableau[$index]{x}

On peut aussi faire des choses amusantes genre:

my @tableau = map { { x => $_->[0], y => $_->[1], z => $_->[2] } } (
[1,2,3],
[4,5,6],
[0,0,0],
);

Et on y accède encore par $tableau[$index]{x}

Comme précisé plus haut, en perl on peut très bien faire:

my @tableau = (
{ type => 'point3d', x=> 0, y=> 2, z=> 42 },
{ type => 'ligne2d', x1 => 0, y1 => 12, x2=> 47, y2 => 79},
{ type => 'rien' },
{ type => 'texte', valeur => 'toto' },
);

Bref, on peut faire ce qu'on veut, comme on veut. Et les références à
perlreftut et perldsc (et éventuellement perllol) sont tout à fait
valables pour comprendre tout ce qu'on peut faire.

Comment font les gens qui ont a ranger a la fois des adresses, des noms,
des valeurs,...etc (le principe de la fiche). associé a un seul index ?


my @tableau = (
{ nom => 'toto', adresse => '12 rue du toto', zip => '12345', city =>
'totoville' },
);

Et c'est quand on commence à utiliser DBI (la couche d'abstraction de perl
pour l'accès aux bases de données, SQL en particulier) et les fonctions
genre selectall_hashref qu'on apprécie la souplesse de perl.

Jacques.
--
Oxado http://www.oxado.com/

Avatar
kevin
Comment font les gens qui ont a ranger a la fois des adresses, des noms, des
valeurs,...etc (le principe de la fiche). associé a un seul index ?



Ben, ils utilisent des références.
Par exemple tu fais un tableau de reférences sur des tableaux.
my $index [ ["nom1","adresse1",valeur1],
["nom2","adresse2",valeur2],
["nom3","adresse3",valeur3] ]
;

print "Mr $index->[0][0] à l'adresse : $index->[0][1]n";

$index->[3]= ["a","b",0169000000];

Mais si tu gère beaucoup de structure regarde plutot du coté de Prolog,
et si tu gère beaucoup de structure et que tu veux de la performances
sans avoir à géré la mémoire regarde du coté de Ada ou Ocaml.

Kévin.

Avatar
DoMinix
gla wrote:
...


Pour répondre au problème de performance, disont que la notion de
performance est relative. J'utilise le Perl pour maquéter les principes (je
bosse depuis une semaine sur un moteur 3D sur console et je paufine le pipe
d'intégration des éléments en provenance de 3DS Max et Maya). Une fois que
ca marche, je le recode en C ou en Assembleur .386 le cas échéant.



il y a un article sur l'ecriture de programme pour la 3D sur perl.com

http://www.perl.com/pub/a/2005/08/04/3d_engine.html

--
dominix

1 2 3