Come faccio dereferenziare un riferimento hash Perl che è stato passato a una subroutine?
-
21-09-2019 - |
Domanda
Sto ancora cercando di risolvere il mio hash dereferencing. Il mio problema attuale è ora sto passando un rifhash ad un sub, e voglio dereferenziarlo all'interno di quel sub. Ma io non sto trovando il giusto metodo di / sintassi per farlo. All'interno del sub, voglio scorrere le chiavi di hash, ma la sintassi per un rifhash non è lo stesso di un hash, che so come fare.
Quindi quello che voglio è quello di fare questo:
sub foo {
%parms = @_;
foreach $keys (key %parms) { # do something };
}
, ma con un rifhash viene passata in al posto di un hash.
Tutti gli indicatori (gioco di parole non destinato) sono i benvenuti.
Grazie.
Soluzione
I havn't effettivamente testato il codice in questo momento, ma la scrittura a mano libera si vorrà fare qualcosa di simile:
sub foo {
$parms = shift;
foreach my $key (keys %$parms) { # do something };
}
Altri suggerimenti
Ecco un modo per risolvere il riferimento Rif un hash passato a 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
Si veda anche Riferimenti riferimento rapido e perlreftut
sub foo
{
my $params = $_[0];
my %hash = %$params;
foreach $keys (keys %hash)
{
print $keys;
}
}
my $hash_ref = {name => 'Becky', age => 23};
foo($hash_ref);
Anche una buona introduzione sui riferimenti è qui .
#!/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";
};
}