Snippets

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

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-1. 点数の合計
# それぞれの人物を表したハッシュリファレンスに, そのハッシュリファレンスに
# 含まれるプログラミング言語のスコア(perl, python, ruby,
# php, binary)を合計した値を, sumというキーで追加してみましょう.
# ここでは, 手動でスコアを合計してハッシュリファレンスに直接入力するのでは
# なく, ハッシュリファレンスを利用してスコアの合計値を計算してから入力する
# ようにしましょう.


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 @people = ( $alice, $bob, $carol, $dave, $ellen );

# for文で配列 @people 内の、人物のハッシュリファレンスにアクセス
for my $man (@people) {

# 人物のハッシュリファレンス内のkey要素(名前とプログラム言語名)を取得
    my @key = keys %{$man};

    # for文で人物のハッシュリファレンスのvalueを取得
    for my $language (@key) {

        # ただし、key要素の中にはプログラム言語ではない
        # name と country という
        # keyがあるので、これは集計から除外する
        if ( $language eq 'name' || $language eq 'country' ) {
            next;
        }

        # プログラム言語のスコアをsumというkeyに都度
        # 足していく
        $man->{sum} += $man->{$language};
    }
}

# 確認用Data::Dumper
print Dumper \@people;

Comments (0)