Passage d'un tableau, d'un scalaire et d'un hachage à un sous-programme en Perl
Quelle est la meilleure façon d'envoyer plusieurs tableaux, variables, hache à une sous-routine?
Forme Simple, fonctionne.
my $msg = &getMsg(1,2,3);
print $msg;
sub getMsg {
my($a, $b, $c) = @_;
}
J'ai de la difficulté avec cette version et je ne suis pas sûr de savoir comment envoyer les données en toute sécurité à la sous-routine sans l'aide d'un mondial qui n'est pas ce que je veux faire.
my @array = ('a','b','c');
my $str = "Hello";
my %hash = (
'a' => ['100','nuts'],
'b' => ['200','bolts'],
'c' => ['300','screws'],
);
my $msg = getMsg(@array, $str, %hash);
print $msg;
sub getMsg {
my (@a, $s, %h) = @_;
my $MSG;
foreach my $x (@a) {
$MSG .= "\n$str, $x your hash value = $h{$x}[0] $h{$x}[1]";
}
return $MSG
}
source d'informationauteur chrisrth
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser des références:
Veuillez noter que la cession-vous essayé:
Ne fonctionne pas, parce que
@a
-- être un tableau -- engloutissent l'ensemble de la liste, laissant$s
et%h
non initialisée.Je préfère TLP réponse, mais vous pouvez également utiliser un prototype:
Le prototype
(\@\%$)
contraint les arguments de la procī edure d'appel à une liste de référence, un hachage de référence, et un scalaire avant les arguments sont aplaties et chargé dans@_
. À l'intérieur de la sous-routine, vous recevez une liste de référence et un hachage de référence au lieu d'un tableau et d'un hachage.Habituellement, bien que, ne pas utiliser des prototypes.