Snippets
Created by
sironekotoro
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | #!/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-5. JSON風Dumper
# どのような方法でもよいので、score.plで用意されたデータを, 次のようなフォーマットで出力するようにしてみてください。
# 出力例
# [
# {
# "python":80
# "binary":30
# "name":"Alice"
# "ruby":80
# "perl":60
# "php":50
# "country":"England"
# },
# {
# "python":10
# "binary":50
# "name":"Bob"
# "ruby":50
# "perl":40
# "php":30
# "country":"America"
# }
# ]
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,
};
# 出力例をみると、ハッシュリファレンス?と見せかけて
# keyの出現順は固定っぽい。
# keyの文字数の降順でもなく、ABC順でもない。
# name,country,各言語が key,value のように並んでいるが、
# 各ペアの末尾にカンマがない
#
# いやらしいことに、配列リファレンス最後の要素後にはカンマがない・・・
#
# 単純に JSON::PP で解決って方法は取れないと判断
#
# Alice の次に Bob が来ているから、配列の並び順はnameのABC順で良さそう
# それぞれの人物を表したハッシュリファレンスを集めた配列を作成
my @people = ( $alice, $bob, $carol, $dave, $ellen );
# 処理する配列リファレンスの要素数を取得する
# 何回ハッシュリファレンスを処理(表示)したかを
# 保存しておくカウンタ
my $count = 0;
# 配列リファレンスを扱うfor文の上下を [ ] で挟む
print '[', "\n";
# for文でハッシュリファレンスの入った配列要素に順番にアクセスする
for my $man (@people) {
# keyというか、keyもどき?の配列を作る
my @key = qw(python binary name ruby perl php country);
# ハッシュリファレンス風の中かっこをつける
print ' {', "\n";
# for文で配列 @key から順次取り出す
for my $key (@key) {
# ただし、name と country については value が文字列で
# ダブルクォーテーションで囲んであるので if文で分ける
if ( $key eq 'name' || $key eq 'country' ) {
print " \"$key\":", "\"$man->{$key}\"", "\n";
}
else {
print " \"$key\":", $man->{$key}, "\n";
}
}
# ハッシュリファレンスを表示し終わったらカウンタを1増やす
$count++;
# 最後のハッシュリファレンスを処理し終えたら、
# カンマなしの中かっこを表示する
if ($count == $#people + 1){
print " }\n"
}else{
print " },\n";
}
}
print ']' , "\n";
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.