Perl入学式 #3 復習問題の続き3
やっと終わった。#3の練習問題で一番きつかったのはしょっぱなのvote.plだなぁ。来週なったらちゃんと書けるか心配。
次はPerl入学式 in Yapc::Asiaの復習。いや、後1回くらいはvote.plやっとこう。
#!/usr/bin/env perl use strict; use warnings; use Data::Dumper; # binmode STDOUT, ":utf8"; my $papix = { name => 'papix', affiliation => 'namba.pm', perl => 60, python => 50, ruby => 50, php => 80, binary => 30, }; my $boolfool = { name => 'boolfool', affiliation => 'namba.pm', perl => 40, python => 10, ruby => 20, php => 30, binary => 10, }; my $moznion = { name => 'moznion', affiliation => 'hachioji.pm', perl => 100, python => 70, ruby => 80, php => 50, binary => 50, }; my $binarian = { name => 'binarian', affiliation => 'hachioji.pm', perl => 10, python => 11, ruby => 1, php => 100, binary => 100, }; my $uzulla = { name => 'uzulla', affiliation => 'hachioji.pm', perl => 1, python => 0.01, ruby => 0.5, php => 4, binary => 0.01, }; # 1.点数の合計 my $sum; my @people = ($papix , $boolfool , $moznion , $binarian , $uzulla); my @language = qw(perl python ruby php binary); for my $member(@people){ for my $i(@language){ # print "$member->{$i}\n"; $sum += "$member->{$i}"; } # print "$member->{name} : $sum\n"; $member->{sum} = $sum; $sum = 0; } # 2.言語ごとの平均 my $avarage; for my $member(@people){ # print $member->{name}; my $prp = ($member->{perl} + $member->{ruby} + $member->{python}) / 3; # print $prp; $avarage->{$member->{name}}=$prp; $prp = 0; } #print Dumper $avarage; # 3.五段階評価 for my $member(@people){ print "$member->{name}\n"; for my $i(@language){ print " $i : $member->{$i} "; if ($member->{$i} < 20){ print "\n"; }elsif($member->{$i} < 40){ print "★\n"; }elsif($member->{$i} < 60){ print "★★\n"; }elsif($member->{$i} < 80){ print "★★★\n"; }elsif($member->{$i} <= 99){ print "★★★★\n"; }elsif($member->{$i} == 100){ print "★★★★★\n"; } } } # 4.所属毎のperlのスコアが60以上の人の名前を格納する # $highscore と言ったハッシュリファレンスを用意し、所属毎に優秀な人物の名前を push して下さい my $highscore; # pushを使うということは、配列として扱う必要があるので、配列のデリファレンスにpushする for my $member(@people){ if ($member->{perl} >= 60){ # print "$member->{name} : $member->{perl}\n" push @$highscore , {$member->{affiliation} => $member->{name}} } } print Dumper $highscore; # 5. JSON風Dumper # 文字列合わせを強引にやっているところがちょっと気に入らない print " \[\n"; for my $member(@people){ print " \{\n"; for my $key(keys %$member){ print " $key : $member->{$key}\n"; } print " \}\n"; } print " \]\n";