Snippets

sironekotoro Perl入学式 2018 第4回 練習問題 output_array_and_hash.pl

Created by sironekotoro
#!/usr/bin/env perl
use strict;
use warnings;

# Perl入学式 2018 第4回 練習問題
# https://github.com/perl-entrance-org/workshop-2018/blob/master/4th/slide.md
# 練習問題(output_array_and_hash.pl)

# 配列とハッシュをそれぞれ1つずつ定義してから,
# 第1引数に配列のリファレンス,
# 第2引数にハッシュのリファレンスを受け取り,
# その中身を出力する(for文などを利用して...),
# output_array_and_hashというサブルーチンを
# 書いてみよう.

# @array:a〜gをの文字を格納した配列
my @array = qw(a b c d e f g);

# %hash :keyにTV局の略称、valueに地デジの
# リモコンキーID(東京)を設定したハッシュ
my %hash = (
    nhk => 1,    # NHK総合
    etv => 2,    # Eテレ
    ntv => 4,    # 日本テレビ
    ex  => 5,    # テレビ朝日
    tbs => 6,    # TBSテレビ
    tx  => 7,    # テレビ東京
    ftv => 8     # フジテレビ
);

# 先頭に\をつけて、リファレンス化した配列とハッシュを
# 引数にして配列を呼び出す
# リファレンス化しないと配列やハッシュといったデータ構造を
# 維持してサブルーチンの中に取り込めない
output_array_and_hash( \@array, \%hash );

# サブルーチンの定義
sub output_array_and_hash {

    # 引数を取得する
    my ( $array_ref, $hash_ref ) = @_;

    # 配列リファレンスをデリファレンスして配列にする
    my @array = @{$array_ref};

    # for文で配列の中身を出力する
    for my $char (@array) {
        print $char , "\n";
    }

    # 区切り線
    print '-' x 10, "\n";


    # ハッシュリファレンスからkeyを取り出す
    # keys関数の引数にはデリファレンスした
    # ハッシュを渡す(%{$hash_ref})
    for my $key ( keys %{$hash_ref} ) {

        # ハッシュリファレンスからアロー演算子で
        # keyに対応するvalueを表示する
        print $key , ":", $hash_ref->{$key}, "\n";
    }

    print '-' x 10, "\n";

    # # ハッシュ2
    # # ハッシュリファレンスをデリファレンして
    # ハッシュに戻してからwhile文を利用した方法
    #
    # my %hash = %{$hash_ref};
    # while ( my ( $key, $value ) = each %hash ) {
    #     print "$key : $value\n";
    # }

}

Comments (0)