bonjour,
je cree une fonction qui prend en parametre un tableau,
le code ci dessous ne marche pas pour le recuperer
il recupere seulement le premier element comment recuperer le tableau entier?
sub ClickIDS{
my @a=@_[0];
print @a;
}
merci par avance
Version imprimable
bonjour,
je cree une fonction qui prend en parametre un tableau,
le code ci dessous ne marche pas pour le recuperer
il recupere seulement le premier element comment recuperer le tableau entier?
sub ClickIDS{
my @a=@_[0];
print @a;
}
merci par avance
En fait c'est @_[0] qui est faux.
On peut aussi passer une référence...Code:
1
2
3
4
5
6
7 ClickIDS(("bidule","toto")); sub ClickIDS{ my @a=@_; print @a; }
oui mais en fait cette fonction prend plusieurs parametres dont le tableau et je ne veux recuperer que le tableau
Bon, la façon la plus propre de passer des paramètres à une fonction quand tu as des tableaux, c'est de passer la référence du tableau.
Voici un exemple de code expliquant cela :
VoilàCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #!/usr/bin/perl use strict; use warnings; my $Login = "sbtrinity"; my $MotDePasse = "tutu"; my %Informations = ( Age => "Inconnu", Inscription => "Avril 2008", ); my @Passions = ("Dvp.com", "foot", "info"); AfficherArguments($Login, $MotDePasse, \%Informations, \@Passions ); sub AfficherArguments { my ( $MonLogin, $MonMotDePasse, $RefInfo, $RefPassions ) = @_; print "Nom : $Login\n"; print "Mot de passe : $MonMotDePasse\n"; print "Age : ", $RefInfo->{Age},"\n"; print "Inscription le : ", $RefInfo->{Inscription},"\n"; print "Mes passions : "; foreach my $passion ( @{$RefPassions} ) { print " $passion"; } print "\n"; return; }
Bonjour,
Je viens de découvrir ce post alors j'essaye de faire passer mon tableau en paramètre comme dans l'exemple ce qui donne :
avec bien sur un petit :Code:
1
2
3
4
5
6
7 sub trie_tableau { my $adr = @_; foreach my $value ( @{$adr} ) { print LOG "test : " . $value; } print LOG "\n\n"; }
Mais au lancement du programme j'ai une erreur : "Can't use string ("1") as an ARRAY ref while "strict refs" in use at P8H_RapTsk.pl line 344."Code:&trie_tableau(\@result);
Je ne vois pas à quoi correspond string ("1") ce qui m'empêche forcément de comprendre l'erreur ...
Bien sur en enlevant "use strict;" ca passe mais les valeurs ne sont pas affichées.
si vous avez une idée, je suis preneur.
Merci d'avance,
FaFa
EDIT : je précise que si je fait :
à la suite sans utiliser de fonctions, les valeurs sont bien affichées. Je dois donc me tromper au niveau de l'envoie des paramètres :/Code:
1
2
3
4 foreach(@result) { print LOG "entree : " . $_ . "\n"; }
Ton erreur est là : si tu met un tableau dans un contexte scalaire, tu obtiens la longueur du tableau, donc ici $adr contient la longueur de @_ qui contient 1 référence de tableau, donc $adr = 1...Code:
1
2 sub trie_tableau { my $adr = @_;
Tu devrais faire soit :
soit :Code:
1
2 sub trie_tableau { my $adr = $_[0];
soit, le plus idiomatique :Code:
1
2 sub trie_tableau { my ( $adr ) = @_;
--Code:
1
2 sub trie_tableau { my $adr = shift;
Jedaï
Merci jedai pour ta réponse rapide ;)
J'ai testé tes solutions mais aucune ne marche. Il me renvoie la même erreur à la diférrence qu'il change string("1") en string("3"). En jetant rapidemment un coup d'oeil sur la FAQ Perl, j'ai trouvé ceci.
En faisant :
ca marche nickel :D il récupère bien les paramètres. Après je ne comprend pas pourquoi tes solutions ne marche pas :(Code:
1
2 sub trie_tableau { my (@adr) = @_;
Je suggère que tu vérifie ton appel, a priori tu ne l'appelles plus avec une référence en argument, parce que toutes mes solutions sont correctes pour ce cas et la tienne non (je pense que tu peux me faire confiance...). Le code suivant marche parfaitement :
--Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 #!/usr/bin/perl use strict; use warnings; sub trie_tableau { my $adr = shift; foreach my $value ( @{$adr} ) { print "test : $value\n"; } } trie_tableau([1,2,3]); __END__
Jedaï
En effet, avec mes tests, j'avait enlever le passage de référence ;)
Merci !
FaFa