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
Nicolas George
"Sébastien V" wrote in message <dhbgpm$nvt$:
sub presence { my (@array, $item) = $_; }
D'une, les arguments d'une fonction sont dans @_, pas dans $_. De deux, quand on écrit :
my (@list, $scalar) = <some list>;
alors @list bouffe tout ce qui est disponible, et il ne reste rien pour $scalar. Pour faire ce que tu veux faire, cf. la doc, en particulier reftut (il y aura des références dans l'histoire) et perlsub, la section consacrée aux prototypes (en particulier les exemples mypop et mysplice).
"Sébastien V" wrote in message <dhbgpm$nvt$1@s1.news.oleane.net>:
sub presence {
my (@array, $item) = $_;
}
D'une, les arguments d'une fonction sont dans @_, pas dans $_. De deux,
quand on écrit :
my (@list, $scalar) = <some list>;
alors @list bouffe tout ce qui est disponible, et il ne reste rien pour
$scalar. Pour faire ce que tu veux faire, cf. la doc, en particulier reftut
(il y aura des références dans l'histoire) et perlsub, la section consacrée
aux prototypes (en particulier les exemples mypop et mysplice).
D'une, les arguments d'une fonction sont dans @_, pas dans $_. De deux, quand on écrit :
my (@list, $scalar) = <some list>;
alors @list bouffe tout ce qui est disponible, et il ne reste rien pour $scalar. Pour faire ce que tu veux faire, cf. la doc, en particulier reftut (il y aura des références dans l'histoire) et perlsub, la section consacrée aux prototypes (en particulier les exemples mypop et mysplice).
J'ai une fonction qui doit accepter une liste ainsi qu'un scalaire. J'ai codé cette fonction comme ça :
sub presence { my (@array, $item) = $_; }
Le truc c'est que perl semble interpréter $_ comme une liste et donc associe à @array ma liste avec le dernier élément inclus. $item se retrouve vide.
Normal... quoique votre code ne doit pas être celui ci-dessus mais plutôt celui ci-dessous :
sub presence { my (@array, $item) = @_; }
En fait le tableau @_ reçoit tous les paramètres passés (tous les éléments du tableau suivi du dernier argument). Ils sont tous mis à plat.
Deux possibilités. Directe :
sub presence { # on dépile le dernier élément my $item = pop @_; # on récupère la liste de tous les éléments my @array = @_; ... }
presence(@tab, $val);
ou en utilisant une référence :
sub presence { my ($refarray, $item) = @_; ... # en travaillant sur $refarray->[0], $refarray->[1], etc. ... # ou sur le tableau @{$refarray} }
presence(@tab, $val);
Dans le premier cas, le contenu du tableau @tab ne peut pas être modifié par le fonction. Dans le second cas, on travaille directement sur le tableau @tab.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
J'ai une fonction qui doit accepter une liste ainsi qu'un scalaire. J'ai
codé cette fonction comme ça :
sub presence {
my (@array, $item) = $_;
}
Le truc c'est que perl semble interpréter $_ comme une liste et donc associe
à @array ma liste avec le dernier élément inclus. $item se retrouve vide.
Normal... quoique votre code ne doit pas être celui ci-dessus mais
plutôt celui ci-dessous :
sub presence {
my (@array, $item) = @_;
}
En fait le tableau @_ reçoit tous les paramètres passés (tous les
éléments du tableau suivi du dernier argument). Ils sont tous mis à
plat.
Deux possibilités. Directe :
sub presence {
# on dépile le dernier élément
my $item = pop @_;
# on récupère la liste de tous les éléments
my @array = @_;
...
}
presence(@tab, $val);
ou en utilisant une référence :
sub presence {
my ($refarray, $item) = @_;
... # en travaillant sur $refarray->[0], $refarray->[1], etc.
... # ou sur le tableau @{$refarray}
}
presence(@tab, $val);
Dans le premier cas, le contenu du tableau @tab ne peut pas être
modifié par le fonction. Dans le second cas, on travaille directement
sur le tableau @tab.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
J'ai une fonction qui doit accepter une liste ainsi qu'un scalaire. J'ai codé cette fonction comme ça :
sub presence { my (@array, $item) = $_; }
Le truc c'est que perl semble interpréter $_ comme une liste et donc associe à @array ma liste avec le dernier élément inclus. $item se retrouve vide.
Normal... quoique votre code ne doit pas être celui ci-dessus mais plutôt celui ci-dessous :
sub presence { my (@array, $item) = @_; }
En fait le tableau @_ reçoit tous les paramètres passés (tous les éléments du tableau suivi du dernier argument). Ils sont tous mis à plat.
Deux possibilités. Directe :
sub presence { # on dépile le dernier élément my $item = pop @_; # on récupère la liste de tous les éléments my @array = @_; ... }
presence(@tab, $val);
ou en utilisant une référence :
sub presence { my ($refarray, $item) = @_; ... # en travaillant sur $refarray->[0], $refarray->[1], etc. ... # ou sur le tableau @{$refarray} }
presence(@tab, $val);
Dans le premier cas, le contenu du tableau @tab ne peut pas être modifié par le fonction. Dans le second cas, on travaille directement sur le tableau @tab.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>