Come faccio dereferenziare un riferimento hash Perl che è stato passato a una subroutine?

StackOverflow https://stackoverflow.com/questions/2282987

  •  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.

È stato utile?

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";
    };
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top