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 | #!/usr/bin/env perl
use strict;
use warnings;
# Perl入学式 2018 第3回 最終問題
# https://github.com/perl-entrance-org/workshop-2018/blob/master/3rd/slide.md
# 練習問題(region_ref.pl)
# 次の処理をする region_ref.pl を作りましょう。
# 1. 以下のデータ構造を表す%japanを作ってください。
# japan
# ├─ tokyo
# │ ├─ gotanda
# │ └─ shibuya
# ├─ osaka
# │ └─ shinsaibashi
# ├─ okinawa
# │ ├─ naha
# │ └─ yomitan
# ├─ hokkaido
# │ ├─ sapporo
# │ └─ obihiro
# └─ fukuoka
# └─ hakata
# 2. 1.で作ったデータから、 gotanda と sapporo を出力してください。
# 3. osaka の中に umeda を追加してください。
# 4. その後、Data::Dumper を使って %japan 全体の中身を出力してください。
# 1. 以下のデータ構造を表す%japanを作ってください
# に従って、ハッシュを作る
my %japan = ();
# 問題文のツリー構造にはいろんな解釈の仕方があるが、今回は
# key : tokyo , osaka などの都道府県名
# value : gotanda , sapporo などの都市名
# valueは配列にして、複数の値を入れられるようにする
# と解釈した
# 以下様々な情報の格納の仕方を試す
# tokyo 配列を作成し、配列リファレンスにしてスカラー変数に格納
# 配列リファレンスを作っておく
my @tokyo_array = ( 'gotanda', 'shibuya' );
my $tokyo_ref = \@tokyo_array;
# osaka 無名配列をスカラー変数に格納
# 配列リファレンスを作っておく
my $osaka_ref = ['shinsaibashi'];
# okinawa qwショートカットで配列を作成する
# (注:ここでは配列を作っただけ)
my @okinawa_array = qw/naha yomitan/;
#
# ここから、ハッシュ%japanのkey,valueを設定していく
#
# ハッシュjapanのkey:tokyo に対するvalueとして、
# 配列リファレンスを格納
$japan{tokyo} = $tokyo_ref;
# ハッシュjapanのkey:osaka に対するvalueとして、
# \をつけた配列名、リファレンスした配列を格納
$japan{osaka} = $osaka_ref;
# ハッシュjapanのkey:okinawa に対するvalueとして、
# \をつけた配列名、リファレンスした配列を格納
$japan{okinawa} = \@okinawa_array;
# ハッシュjapanのkey:hokkaido に対するvalueとして、
# 無名配列を格納
$japan{hokkaido} = [ 'sapporo', 'obihiro' ];
# ハッシュjapanのkey:fukuoka に対するvalueとして、
# 無名配列を格納
$japan{fukuoka} = ['hakata'];
# gotanda アロー記法
print $japan{tokyo}->[0], "\n"; # gotanda
# sapporo アロー記法の省略
print $japan{hokkaido}[0], "\n"; # sapporo
# おまけ:yomitan 配列リファレンスをデリファレンスして
# 添え字で指定して表示する
print ${$japan{okinawa}}[1], "\n"; # sapporo
# $japan{osaka} にumeda を加える
# $japan{osaka}のvalueは配列リファレンスなので、
# 配列リファレンスをデリファレンスして配列に戻し、
# 配列に加える関数 push を用いて umeda という文字列を
# 加える
push @{$japan{osaka}} , 'umeda';
# おまけ: $japan{tokyo} に kichijyouji を加える
# 配列リファレンス内の要素数が分かっている場合には、
# 添え字を指定してアロー記法で直接要素を追加できる
$japan{tokyo}->[2] = 'kichijyouji';
use Data::Dumper;
print Dumper \%japan;
|
Comments (0)
You can clone a snippet to your computer for local editing. Learn more.