Snippets

sironekotoro Perl入学式 2018 第3回 復習問題 score.pl 2-4

Created by sironekotoro
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;

# Perl入学式 2018 第3回 復習問題 score.pl
# https://github.com/perl-entrance-org/workshop-2018/blob/master/3rd/practice.md

# 2-4. 国ごとのPerlハイスコアリストを作る
# $highscoreというハッシュリファレンスを作成し、国(country)
# ごとの perl のスコアが 60 以上の人の名前を格納しましょう。

my $alice = {
    name    => 'Alice',
    country => 'England',
    perl    => 60,
    python  => 80,
    ruby    => 80,
    php     => 50,
    binary  => 30,
};
my $bob = {
    name    => 'Bob',
    country => 'America',
    perl    => 40,
    python  => 10,
    ruby    => 20,
    php     => 30,
    binary  => 50,
};
my $carol = {
    name    => 'Carol',
    country => 'England',
    perl    => 100,
    python  => 70,
    ruby    => 80,
    php     => 50,
    binary  => 50,
};
my $dave = {
    name    => 'Dave',
    country => 'Canada',
    perl    => 60,
    python  => 11,
    ruby    => 1,
    php     => 100,
    binary  => 100,
};
my $ellen = {
    name    => 'Ellen',
    country => 'America',
    perl    => 1,
    python  => 15,
    ruby    => 0.5,
    php     => 60,
    binary  => 0.01,
};

my $highscore;

# それぞれの人物を表したハッシュリファレンスを集めた配列を作成
my @people = ( $alice, $bob, $carol, $dave, $ellen );

for my $man (@people) {

    # 人物のハッシュリファレンスのkeyがperlの値が
    # 60以上だった場合
    if ( $man->{perl} >= 60 ) {

        # 国名を取得
        my $country = $man->{country};

# 国名をkeyに、名前をvalueに作成される配列リファレンスにpushする
# valueに配列リファレンスがなければ、pushすることで作成される
        push @{ $highscore->{$country} }, $man->{name};
    }

}

# 確認用Data::Dumper
print Dumper $highscore;

Comments (0)