j'ai un sous programme :
sub newVector {
my($x, $y, $z) = @_;
my %v=('x',$x,'y',$y,'z',$z);
#printf "<%8.6f, %8.6f, %8.6f>\n",$v{x},$v{y},$v{z};
return %v;
}
avec my %v=newVector(1.235,5.789,2.354);
si j'enlève le commentaire du print, ç'est ok.
je me suis dis bêtement, je vais faire un autre sous programme pour
afficher mes vecteurs :
sub printVector {
my %thisVector = shift;
printf "<%8.6f, %8.6f,
%8.6f,>",$thisVector{x},$thisVector{y},$thisVector{z};
}
et la, bien sûr, ça ne marche pas. c'est un peu normal car comment
%thisVector peux connaitre les clé 'x','y' et 'z'.
bon alors, existe-t-il un moyen de faire un 'cast', enfin de faire un
truc pour que %thisVector soit conforme à ce que je veux ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Baptiste Mazon
kurtz le pirate writes:
sub printVector { my %thisVector = shift; printf "<%8.6f, %8.6f, %8.6f,>",$thisVector{x},$thisVector{y},$thisVector{z}; }
et la, bien sûr, ça ne marche pas. c'est un peu normal car comment %thisVector peux connaitre les clé 'x','y' et 'z'.
Comment transmettez-vous votre vecteur à printVector?
Si c'est "en direct", par ex: printVector %monVecteur, il va être évalué dans un contexte de liste, et vous le retrouverez dans @_. Affichez @_ à l'entrée de votre fonction d'affichage, vous comprendrez tout de suite de quoi il retourne.
En comparant à ce que vous obtenez en affectant 'shift' à %thisVector, vous devriez facilement trouver une correction.
bon alors, existe-t-il un moyen de faire un 'cast', enfin de faire un truc pour que %thisVector soit conforme à ce que je veux ?
Vous obtiendrez probablement de meilleures preformances en le transmettant par référence. Mais ça n'empêche pas ce que vous avez déjà écrit d'être proche d'une solution qui marche.
kurtz le pirate <kurtzlepirate@yahoo.fr> writes:
sub printVector {
my %thisVector = shift;
printf "<%8.6f, %8.6f,
%8.6f,>",$thisVector{x},$thisVector{y},$thisVector{z};
}
et la, bien sûr, ça ne marche pas. c'est un peu normal car comment
%thisVector peux connaitre les clé 'x','y' et 'z'.
Comment transmettez-vous votre vecteur à printVector?
Si c'est "en direct", par ex: printVector %monVecteur, il va être
évalué dans un contexte de liste, et vous le retrouverez dans @_.
Affichez @_ à l'entrée de votre fonction d'affichage, vous comprendrez
tout de suite de quoi il retourne.
En comparant à ce que vous obtenez en affectant 'shift' à %thisVector,
vous devriez facilement trouver une correction.
bon alors, existe-t-il un moyen de faire un 'cast', enfin de faire un
truc pour que %thisVector soit conforme à ce que je veux ?
Vous obtiendrez probablement de meilleures preformances en le
transmettant par référence. Mais ça n'empêche pas ce que vous avez
déjà écrit d'être proche d'une solution qui marche.
sub printVector { my %thisVector = shift; printf "<%8.6f, %8.6f, %8.6f,>",$thisVector{x},$thisVector{y},$thisVector{z}; }
et la, bien sûr, ça ne marche pas. c'est un peu normal car comment %thisVector peux connaitre les clé 'x','y' et 'z'.
Comment transmettez-vous votre vecteur à printVector?
Si c'est "en direct", par ex: printVector %monVecteur, il va être évalué dans un contexte de liste, et vous le retrouverez dans @_. Affichez @_ à l'entrée de votre fonction d'affichage, vous comprendrez tout de suite de quoi il retourne.
En comparant à ce que vous obtenez en affectant 'shift' à %thisVector, vous devriez facilement trouver une correction.
bon alors, existe-t-il un moyen de faire un 'cast', enfin de faire un truc pour que %thisVector soit conforme à ce que je veux ?
Vous obtiendrez probablement de meilleures preformances en le transmettant par référence. Mais ça n'empêche pas ce que vous avez déjà écrit d'être proche d'une solution qui marche.
Mark Clements
kurtz le pirate wrote:
re,
j'ai un sous programme : sub newVector { my($x, $y, $z) = @_; my %v=('x',$x,'y',$y,'z',$z); #printf "<%8.6f, %8.6f, %8.6f>n",$v{x},$v{y},$v{z}; return %v; }
avec my %v=newVector(1.235,5.789,2.354); si j'enlève le commentaire du print, ç'est ok.
je me suis dis bêtement, je vais faire un autre sous programme pour afficher mes vecteurs : sub printVector { my %thisVector = shift;
Devrait être:
my %thisVector = @_;
Pour
my %thisVector = shift;
si vous tourniez le programme avec
use warnings;
vous recevriez une message en style
Odd number of elements in hash assignment at -e line 1.
et la, bien sûr, ça ne marche pas. c'est un peu normal car comment %thisVector peux connaitre les clé 'x','y' et 'z'.
bon alors, existe-t-il un moyen de faire un 'cast', enfin de faire un truc pour que %thisVector soit conforme à ce que je veux ?
merci
kurtz le pirate
In article , Jean-Baptiste Mazon wrote:
kurtz le pirate writes:
sub printVector { my %thisVector = shift; printf "<%8.6f, %8.6f, %8.6f,>",$thisVector{x},$thisVector{y},$thisVector{z}; }
et la, bien sûr, ça ne marche pas. c'est un peu normal car comment %thisVector peux connaitre les clé 'x','y' et 'z'.
Comment transmettez-vous votre vecteur à printVector?
Si c'est "en direct", par ex: printVector %monVecteur, il va être évalué dans un contexte de liste, et vous le retrouverez dans @_. Affichez @_ à l'entrée de votre fonction d'affichage, vous comprendrez tout de suite de quoi il retourne.
oui en direct, printVector(%myVector);
En comparant à ce que vous obtenez en affectant 'shift' à %thisVector, vous devriez facilement trouver une correction.
je vais regarder dans cette direction...
bon alors, existe-t-il un moyen de faire un 'cast', enfin de faire un truc pour que %thisVector soit conforme à ce que je veux ?
Vous obtiendrez probablement de meilleures preformances en le transmettant par référence. Mais ça n'empêche pas ce que vous avez déjà écrit d'être proche d'une solution qui marche.
-- klp
In article <fmsejna4l42.fsf@somewhere.net>,
Jean-Baptiste Mazon <jmazon@invalid.invalid> wrote:
kurtz le pirate <kurtzlepirate@yahoo.fr> writes:
sub printVector {
my %thisVector = shift;
printf "<%8.6f, %8.6f,
%8.6f,>",$thisVector{x},$thisVector{y},$thisVector{z};
}
et la, bien sûr, ça ne marche pas. c'est un peu normal car comment
%thisVector peux connaitre les clé 'x','y' et 'z'.
Comment transmettez-vous votre vecteur à printVector?
Si c'est "en direct", par ex: printVector %monVecteur, il va être
évalué dans un contexte de liste, et vous le retrouverez dans @_.
Affichez @_ à l'entrée de votre fonction d'affichage, vous comprendrez
tout de suite de quoi il retourne.
oui en direct, printVector(%myVector);
En comparant à ce que vous obtenez en affectant 'shift' à %thisVector,
vous devriez facilement trouver une correction.
je vais regarder dans cette direction...
bon alors, existe-t-il un moyen de faire un 'cast', enfin de faire un
truc pour que %thisVector soit conforme à ce que je veux ?
Vous obtiendrez probablement de meilleures preformances en le
transmettant par référence. Mais ça n'empêche pas ce que vous avez
déjà écrit d'être proche d'une solution qui marche.
sub printVector { my %thisVector = shift; printf "<%8.6f, %8.6f, %8.6f,>",$thisVector{x},$thisVector{y},$thisVector{z}; }
et la, bien sûr, ça ne marche pas. c'est un peu normal car comment %thisVector peux connaitre les clé 'x','y' et 'z'.
Comment transmettez-vous votre vecteur à printVector?
Si c'est "en direct", par ex: printVector %monVecteur, il va être évalué dans un contexte de liste, et vous le retrouverez dans @_. Affichez @_ à l'entrée de votre fonction d'affichage, vous comprendrez tout de suite de quoi il retourne.
oui en direct, printVector(%myVector);
En comparant à ce que vous obtenez en affectant 'shift' à %thisVector, vous devriez facilement trouver une correction.
je vais regarder dans cette direction...
bon alors, existe-t-il un moyen de faire un 'cast', enfin de faire un truc pour que %thisVector soit conforme à ce que je veux ?
Vous obtiendrez probablement de meilleures preformances en le transmettant par référence. Mais ça n'empêche pas ce que vous avez déjà écrit d'être proche d'une solution qui marche.
-- klp
kurtz le pirate
In article <460966ab$0$25922$, Mark Clements wrote:
si vous tourniez le programme avec
use warnings;
vous recevriez une message en style
Odd number of elements in hash assignment at -e line 1.
pourtant, mon script commence par :
#!/usr/bin/perl -w use strict;
le <-w> est équivalent au use warning non ? :))
-- klp
In article <460966ab$0$25922$ba4acef3@news.orange.fr>,
Mark Clements <mark.clementsREMOVETHIS@wanadoo.fr> wrote:
si vous tourniez le programme avec
use warnings;
vous recevriez une message en style
Odd number of elements in hash assignment at -e line 1.