如何使用perl迭代對象內部的哈希數組

我試圖遍歷存儲為“Person”對象的'_skills屬性的哈希數組,但遇到了問題。

test1.pl

my $person = new Person( "Hubert", "Blu",
    [
       {"name" => "Python", "Weight" => 80, "group","IT SKILLS", "id"=>0002},
       {"name" => "Magic", "Weight" => 100, "group", "MISC SKILLS", "id"=>0001},
       {"name" => "JavaScript","Weight" => 70, "group"=> "IT SKILLS", "id"=>0004},
       {"name" => "Mage","Weight" => 100, "group"=>"JOB TITLE", "id" =>0003},
       {"name" => "Assassin", "Weight" => 85, "group"=>"JOB TITLE"}
    ]
);


and Person.pl

sub new {
    my ($class,$first_name,$last_name,@skills) = @_ ;
    my $self = {};
    $self->{"_first_name"} = $first_name;
    $self->{"_last_name"} = $last_name;
    @{$self->{"_skills"}} = @skills;
    # Print all the values just for clarification.
    print "First Name is $self->{_first_name}\n";
    print "Last Name is $self->{_last_name}\n";
    print "Skills : " . Data::Dumper::Dumper($self->{_skills}) . "\n";


    print"---SKILLS---\n";
    my $i = 1;
    foreach my $skill_set (@{$self->{_skills}}) {
        print "skill ".$i .": \n";
        $i++;
        #print Data::Dumper::Dumper($skill_set) . "\n";
        print "$skill_set->{'_first_name'}";
    };
    bless $self, $class;
    return $self;
}

第一次轉儲顯示了陣列,看起來很好。循環(huán)中的第二個轉儲再次顯示整個數組,它只循環(huán)一次,然后返回以下錯誤

Not a HASH reference at /home/izoom/PerlTrainingGround/LeeR/lib/Person/Person.pm line 26.

被困了好幾個小時,感謝您一如既往的幫助!

? 最佳回答:

您正在將三個參數傳遞給new和invocant。最后一個是對數組的引用。這意味著@skills以一個元素結束,該元素的值就是該引用。

my $person = new Person( "Hubert", "Blu",
    [
       {"name" => "Python", "Weight" => 80, "group","IT SKILLS", "id"=>0002},
       {"name" => "Magic", "Weight" => 100, "group", "MISC SKILLS", "id"=>0001},
       {"name" => "JavaScript","Weight" => 70, "group"=> "IT SKILLS", "id"=>0004},
       {"name" => "Mage","Weight" => 100, "group"=>"JOB TITLE", "id" =>0003},
       {"name" => "Assassin", "Weight" => 85, "group"=>"JOB TITLE"}
    ]
);

should be

my $person = new Person( "Hubert", "Blu",
   {"name" => "Python", "Weight" => 80, "group","IT SKILLS", "id"=>0002},
   {"name" => "Magic", "Weight" => 100, "group", "MISC SKILLS", "id"=>0001},
   {"name" => "JavaScript","Weight" => 70, "group"=> "IT SKILLS", "id"=>0004},
   {"name" => "Mage","Weight" => 100, "group"=>"JOB TITLE", "id" =>0003},
   {"name" => "Assassin", "Weight" => 85, "group"=>"JOB TITLE"}
);

or

    my ($class,$first_name,$last_name,@skills) = @_ ;

    @{$self->{"_skills"}} = @skills;     # Useless shallow array copy
       # -or-
    $self->{"_skills"} = [ @skills ];    # Same[1] but clearer
       # -or-
    $self->{"_skills"} = \@skills;       # No copy of elements

should be

    my ($class,$first_name,$last_name,$skills) = @_ ;

    @{$self->{"_skills"}} = @$skills;    # Shallow array copy
       # -or-
    $self->{"_skills"} = [ @$skills ];   # Same[1] but clearer
       # -or-
    $self->{"_skills"} = $skills;        # No copy of elements

  1. 因為此時$self->{"_skills"}undef。
主站蜘蛛池模板: 精品国产一区二区三区四区 | 国产精品福利一区二区久久| 日本不卡在线一区二区三区视频| 亚洲高清毛片一区二区| 久久精品无码一区二区app| 精品国产亚洲第一区二区三区| 精品人妻码一区二区三区| 中文字幕一区二区人妻性色 | 成人在线一区二区| 午夜爽爽性刺激一区二区视频| 麻豆AV一区二区三区久久| 国精品无码一区二区三区在线| 国产免费一区二区三区免费视频| 在线|一区二区三区四区| 亚洲一区二区三区丝袜| 国产伦精品一区二区三区女| 精品日韩亚洲AV无码一区二区三区| 亚洲av午夜福利精品一区人妖| 国产免费无码一区二区| 国产精品一区二区久久不卡| 波多野结衣高清一区二区三区 | 精品欧美一区二区在线观看 | 久久精品国产免费一区| 国产在线不卡一区二区三区| 天堂Aⅴ无码一区二区三区| 国产一区二区三区夜色| 中文字幕一区二区三区精华液| 久久一区二区免费播放| 国产亚洲一区二区三区在线| 性色AV一区二区三区| 亚洲综合在线成人一区| 亚洲国产欧美一区二区三区| 亚洲无码一区二区三区| 色婷婷亚洲一区二区三区 | 亚洲熟妇成人精品一区| 色婷婷亚洲一区二区三区| 一区二区三区AV高清免费波多| 久久精品国产第一区二区| 无码人妻久久一区二区三区 | 一区二区三区杨幂在线观看| 国产在线一区二区在线视频|