Snippets

sironekotoro Perl入学式 2018 第3回 最終問題 region_ref.pl

Created by sironekotoro

File region_ref.pl Added

  • Ignore whitespace
  • Hide word diff
+#!/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;
+
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.