Comment faire pour retourner plusieurs valeurs à partir d'une fonction Perl appel?
Comment puis-je retourner plusieurs valeurs à partir d'une fonction Perl appel?
Exemple de code
my ($value1, $value2, $value3) = getValues(@parts)
sub getValues
{
foreach(@_)
{
$_ =~ m{/test1_name (.*) test2_name (.*) test3_name (.*)/};
$test1_value = $1;
$test2_value = $2;
$test3_value = $3;
}
}
Ce code ne fonctionne pas.
Pourriez-vous montrer comment votre tableau
Juste pour s'assurer que vous êtes conscient que vous, je n'ai pris que la première valeur de votre tableau
@parts
est déclaré?Juste pour s'assurer que vous êtes conscient que vous, je n'ai pris que la première valeur de votre tableau
@parts
. Si vous voulez faire cela pour toutes les valeurs dans ce tableau, alors vous aurez à utiliser une boucle for.OriginalL'auteur Bruc Walker | 2011-09-09
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de le mettre dans la boucle foreach si vous êtes juste essayer d'obtenir $1, $2, $3. Le
my $str = shift @_;
dit en gros "définir la variable str pour le premier élément dans les valeurs passées dans cette sous".Aussi, vous êtes de passage dans un tableau. J'ai fait une maj parce que c'est la première valeur du tableau (qui je suppose est la chaîne que vous souhaitez analyser). Si vous essayez de faire quelque chose de différent, de mise à jour de votre question et je vais mettre à jour ma réponse.
OriginalL'auteur Dave
En plus des autres réponses, vous pouvez profiter du fait qu'une expression régulière dans un contexte de liste renvoie à la capture de la parenthèse, et que tous les sous-programmes de retour de leur dernière expression évaluée:
Depuis ce sous-programme est tellement simple, vous pouvez également écrire de cette façon:
OriginalL'auteur Eric Strom
Le langage Perl serait de retourner plusieurs valeurs dans une liste et ensuite affecter le résultat de la fonction à la liste des variables que vous souhaitez recevoir des valeurs. Vous avez déjà affecté le résultat de la fonction correctement, de sorte que le seul changement que vous avez besoin est
return ($1, $2, $3);
comme tout le monde l'a suggéré.OriginalL'auteur smackcrane