J'essaie toujours de régler mon déréférencissage de hachage. Mon problème actuel est que je suis maintenant en train de passer un hashref à un sous-produit et je veux la désirer dans ce sous-produit. Mais je ne trouve pas la méthode / la syntaxe correcte pour le faire. Dans le sous-bas, je souhaite itérer les clés de hachage, mais la syntaxe d'un hashref n'est pas la même chose qu'un hash, que je sais faire.
Ce que je veux, c'est faire ceci: p> < Pré> xxx pré>
mais avec un hashref étant transmis au lieu d'un hachage. p> p>
5 Réponses :
J'ai vraiment testé le code à ce moment-là, mais écrivez à main levée, vous voudrez faire quelque chose comme ceci:
sub foo {
$parms = shift;
foreach my $key (keys %$parms) { # do something };
}
L'utilisation de décalage au lieu de @_ a fait l'affaire, et bien sûr, à l'aide d'un scalaire au lieu d'un hash pour la variable. Code de travail: Sub FOO {$ Parms = Shift; foreach $ clé (clés% $ parmi) {impression "$ clé: $$ parms {$ clé} \ n"; } } Merci!
shift code> vs. @_ code> n'est pas pertinent. mon ($ hashref) = @_; code> fonctionnera aussi bien.
@Nobody Oui THX, dans ce contexte, mais ne pas dire qu'il n'y a pas de différence significative entre shift code> et @ code> généralement. Le @ code> sans parenthèses mon $ hashref = @_; code> retournerait un scalaire (= le nombre de paramètres passés) ou éventuellement une gamme complète de paramètres passés utilisés comme ceci => mon @var = @_; code>. Fonctionnerait la même chose / dans votre affectation de «destructuration» mon ($ hashref) = @_; code>
Voici un moyen de déréférenfer à un hachage Ref passé à un SUB:
use warnings;
use strict;
my %pars = (a=>1, b=>2);
foo(\%pars);
sub foo {
my ($href) = @_;
foreach my $keys (keys %{$href}) { print "$keys\n" }
}
__END__
a
b
sub foo
{
my $params = $_[0];
my %hash = %$params;
foreach $keys (keys %hash)
{
print $keys;
}
}
my $hash_ref = {name => 'Becky', age => 23};
foo($hash_ref);
Also a good intro about references is here.
Merci pour le lien. J'utilise celui-là comme référence, mais je ne l'ai toujours pas tout à fait la compréhension.
#!/usr/bin/perl
use strict;
my %params = (
date => '2010-02-17',
time => '1610',
);
foo(\%params);
sub foo {
my ($params) = @_;
foreach my $key (keys %$params) {
# Do something
print "KEY: $key VALUE: $params{$key}\n";
};
}
EEP, n'ai pas vu Toolics réponse jusqu'à juste maintenant. ;X
Je dirais que sa nommée est meilleure (nommer le hashref comme href).
Déréférence La référence initiale, mais utilisez-la comme une autre / sa copie, ce qui est également très courant ou plus courant.