第4章のサンプルコード
---------------------
目次（ページ番号）
■P70-1
■P70-2
■P71
■P72-1
■P72-2
■P73-1
■P73-2
■P76
■P77
■P79-1
■P79-2
■P81
■P82
■P83
■P85
■P86
---------------------

■P70-1
# リストを定義する
#  list.pl

# 数値リスト
@number_list = (1, 2, 3);

# 文字列リスト
@string_list = ("A", "B", "C");

# 混合リスト
@mix_list = ("ABC", "太郎", 1, "花子");

# 変数を含むリスト
$variable = 1;
@include_variable_list = ($variable, $variable + 1);

# 別のリストを含むリスト
@number_addlist = (@number_list, 4, 5, 6, 7);

■P70-2
# リストとして参照したときと文字列や数値として参照したときの違い
#  ref_or_scalar.pl

@array = ("私", "は", "太郎", "です");

# リストとして表示
print @array, "\n";

# 文字列(スカラー変数)として表示
print @array. "\n";

# 数値(スカラー変数)として表示
print @array + 0, "\n";

# スカラーに明示的に変換して表示
print scalar(@array), "\n";

■P71
# 入力した数に相当する月の名前を表示
#  month.pl

# 月の名前の配列を設定
@month = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul',
'Aug', 'Sep', 'Oct', 'Nov', 'Dec');

print "月を指定してください(1〜12): ";
$number = <STDIN>;
chomp($number);

# 相当する月の名前を表示
print ($month[$number - 1], "\n");

■P72-1
# 入力した数に相当する月の名前を表示
#  month2.pl

print "月を指定してください(1〜12): ";
$number = <STDIN>;
chomp($number);

# 相当する月の名前を表示
print (('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul',
'Aug', 'Sep', 'Oct', 'Nov', 'Dec')[$number - 1], "\n");

■P72-2
# forを使って配列の要素を表示
#  for.pl

@array = ("私", "は", "太郎", "です");

# それぞれの値をforで表示
for ($i = 0; $i < @array; $i++) {
  # $array[number]の形で参照
  print "要素$i: $array[$i]\n";
}

■P73-1
# qwを使って要素を定義
#  qw.pl

@array = qw (
             私
             は
             太郎
             です
             );

# それぞれの値をforで表示
for ($i = 0; $i < @array; $i++) {
  print "要素$i: $array[$i]\n";
}

■P73-2
# 範囲演算子を使ったリストの指定
#  region.pl

# 数値の範囲
@numbers = (1 .. 7);
print @numbers, "\n";

# 英文字の範囲
@alphabets = ("a" .. "f");
print @alphabets, "\n";

# いくつかの数値の範囲
@skip_numbers = (1, 3 .. 5, 8 .. 9);
print @skip_numbers, "\n";

■P76
# pushとpopのテスト
#  push_pop.pl

# 初期配列を定義
@array = (1 .. 7);
print "初期状態の配列: ", @array, "\n";

# push
push(@array, 8);
print "push実行後の配列: ", @array, "\n";

# pop
print "popで ", pop(@array), " を取得\n";
print "pop実行後の配列: ", @array, "\n";

■P77
# unshiftとshiftのテスト
#  unshift_shift.pl

# 初期配列を定義
@array = (1 .. 7);
print "初期状態の配列: ", @array, "\n";

# unshift
unshift(@array, 8);
print "unshift実行後の配列: ", @array, "\n";

# shift
print "shiftで ", shift(@array), " を取得\n";
print "shift実行後の配列: ", @array, "\n";

■P79-1
# foreachステートメントのテスト
#  foreach.pl

@array = (1 .. 7);

# foreachステートメントでループ
foreach $value (@array) {
  print "$value ";
}
print "\n";

■P79-2
# $_を使ったforeachステートメントのテスト
#  foreach2.pl

@array = (1 .. 7);

# foreachステートメントでループ
foreach (@array) {
  print "$_ ";
}
print "\n";

■P81
# 2とおりのハッシュの定義
#  hash.pl

# =>を使わないハッシュの定義
%hash_array = ('姓', '山田', '名', '太郎');
print "姓: ", $hash_array{'姓'}, "\n";
print "名: ", $hash_array{'名'}, "\n";

# =>を使ったハッシュの定義
%hash_array = ('姓'=>'鈴木', '名'=>'花子');
print "姓: ", $hash_array{'姓'}, "\n";
print "名: ", $hash_array{'名'}, "\n";

■P82
# 「赤」と「青」の数の合計を表示
#  red_blue.pl

@data = ('赤', '青', '青', '赤', '青', '赤', '赤', '赤', '青');

# 配列を処理
foreach $color (@data) {
  # 色名をキーにしたハッシュの値をインクリメント
  $total{$color}++;
}

# 結果を表示
print "赤: ", $total{'赤'}, " 青: ", $total{'青'}, "\n";

■P83
# 値とキーを取得し、重複するときにはdeleteで削除する
#  ask_hash.pl

while(1) {
  # キーと値を受け取る
  print "キーを入力してください: ";
  $key = <STDIN>;
  chomp($key);
  print "値を入力してください: ";
  $value = <STDIN>;
  chomp($value);

  # キーか値がQUITの場合は、ループを抜ける
  last if ($key eq "QUIT" || $value eq "QUIT");

  # キーに対応する値が存在しない場合
  unless ($hash{$key}) {
    print "%hash にキー $key 、値 $value を格納しました。\n";
    $hash{$key} = $value;
  # キーに対応する値がすでに存在する場合
  } else {
    print "%hash からキー $key 、値 $hash{$key} を削除しました。\n";
    delete $hash{$key};
  }
}
■P85
# keys、values、eachのテスト
#  keys_values_each.pl

%array = (
          "姓"=>"山田",
          "名"=>"太郎",
          "年齢"=>20
          );

# キーリスト表示
print "キー:\n";
foreach $key (keys(%array)) {
  print "\t$key\n";
}

# 値リスト表示
print "値:\n";
foreach $value (values(%array)) {
  print "\t$value\n";
}

# ペア表示
print "ペア:\n";
print "\t$key -> $value\n" while (($key, $value) = each(%array));

■P86
# exists関数のテスト
#  exists.pl

# 空の変数を定義
$variable{'hello'} = "こんにちは";
$variable{'null'} = "";

# 単純な真偽で判定
print "[単純な真偽で判定]\n";
foreach $key ('hello', 'null', 'none') {
  print "キー $key は存在します\n" if ($variable{$key});
}

# exists関数で判定
print "\n[exists関数で判定]\n";
foreach $key ('hello', 'null', 'none') {
  print "キー $key は存在します\n" 
    if (exists($variable{$key}));
}
