-2

ハッシュ値へのアクセスに問題があり、何が間違っているのかわかりません。私はいくつかのPerlを実行しますが、ハッシュはあまり使用しません。

ハッシュのハッシュでハッシュ値にアクセスしようとしています。

これが私がハッシュを構築する場所です

sub buildList
{
    my ($name,$gender,$father,$mother,$age);
    my %bear_ref=();

    open IN, "<input.txt" or die "can't open file";

    while(<IN>) {
        ($name, $gender, $father, $mother, $age ) = split(/:/);
        $bear_ref{ $name } { 'gender' } = $gender;
        $bear_ref{ $name } { 'mother' } = $father;
        $bear_ref{ $name } { 'father' } = $mother;
        $bear_ref{ $name } { 'age' } = $age;
    }
    close IN;
    return \%bear_ref;
}

ハッシュ内のキーを反復処理しているときにリストにアクセスできますが、直接アクセスすることはできません。したがって、「keys()ループ」から値を取得する方法と関係があると思います。

for my $name (keys %$ref) {
   $father= $ref->{ $name }->{ 'father'}; # works
   $mother= $ref->{ $name }->{ 'mother'}; # works
   getTree($name, $ref);
}

sub getTree
{
    my $bear = shift;
    my $ref = shift;
    my ($father, $mother);
     $father= $ref->{ $name }->{ 'father'}; # doesn't work...have also tried with %$ref->
     $mother= $ref->{ $name }->{ 'mother'}; # doesn't work...have also tried with %$ref->
    print "$father : $mother\n";

}

どんな助けでもいただければ幸いです。

4

1 に答える 1

3

$nameサブ$bearにあるはずです。getTree

sub getTree
{
    my $bear = shift;
    my $ref = shift;
    my ($father, $mother);
    ## note that I am using $bear instead of $name since $name is not defined
    $father= $ref->{ $bear }->{ 'father'};
    $mother= $ref->{ $bear }->{ 'mother'};
    print "$father : $mother\n";
}

注: use strict参考にuse warningsなります。

于 2012-10-01T20:23:15.220 に答える