P.72
4-1.曜日と月の名前
# month.pl
# 英単語の練習(1)

# 単語の定義
 @word = qw (Sunday 日曜日 Monday 月曜日 Tuesday 火曜日 Wednesday 水曜日
     Thursday 木曜日 Friday 金曜日 Saturday 土曜日
     January 1月 February 2月 March 3月 April 4月 May 5月
     June 6月 July 7月 August 8月 September 9月
     October 10月 November 11月 December 12月) ;

# 単語の数
 $ct = @word / 2 ;

# 説明文の表示
 print "\n 先頭は大文字で書きます。\n" ;

# テスト開始
 while(++$k)
  {
  # 単語の決定
   $num = int rand $ct ;

  # テスト開始
   while(1)
    {
   # 単語の表示と入力
    print "\n $word[(2*$num +1)]:" ;
    $eng = <STDIN> ;
    chomp $eng ;

    # 単語の照合
    if ($eng eq $word [(2*$num)])
     {print "\n あっています。($k)\n"; last}
    else {print "\n 違います。\n"; redo}
    }
  }


P.75
4-2.世界の国や都市の名前
# world.pl

# 英単語の練習(2)

# データの読み込み
 open F, "w_city.txt" ;
 @city = <F> ;
 map chomp, @city ;

# データの個数
 $ct = @city/2 ;

# 説明文の表示
print <<EOF ;
\n 世界の国や都市を英語で書いてください。\n
データは全部で $ct 個あります。\n
先頭は大文字で書いてください。\n
ミスは3回まで。途中終了は 99 です。
EOF

# 出題パターンの選択
 print "\n 出題形式(1.国順 2.ランダム):" ;
 $tp = <STDIN> ;
 chomp $tp ;
 if ($tp == 2)
  {
  # シャッフル   
   for (0..$ct)
    {
     $r1 = 2*int(rand $ct);
     $r2 = 2*int(rand $ct);
     ($city[$r1], $city[$r2]) = ($city[$r2], $city[$r1]);
     ($city[$r1+1], $city[$r2+1]) = ($city[$r2+1], $city[$r1+1]) ;
    }
  }

# 初期値の設定
 ($hit, $mis) = (0, 0) ;

# テスト開始
 for $i (1..$ct)
   {
   # 単語の照合
    print "\n $city[2*$i-1] ($i/$ct):" ;
    $eng = <STDIN> ;
    chomp $eng ;

 # 途中終了
   if ($eng eq "99") {print "\n 次は最後までやりましょう!\n" ;exit}

 # 正解した場合
   if ($eng eq $city[2*$i-2])
    {++$hit ; print "\n 正解です ! (正 $hit / 誤 $mis) \n" }

 # 誤りの場合
   else
    {
     print "\a\n 違います !(1.もう一度 / 他.答を見る):" ;
     $dx = <STDIN> ;
     chomp $dx ;

    # もう一度やる
     if ($dx == 1){redo}

    # 答を見る
     else
      {
      # 誤りの回数チェック
       ++$mis ;if ($mis == 4) {print "\n はじめからやり直し!\n" ;exit}
       print "\n $city[2*$i-2] (正 $hit / 誤 $mis) \n"
      }
    }
    }

print "\n おめでとう! \(^o^)/ 最後までよく頑張りました。\n"


# w_city.txt

Algeria
アルジェリア
Egypt
エジプト
Austria
オーストリア
Belgium
ベルギー
Brussels
ブリュッセル(ベルギー)
Denmark
デンマーク
Copenhagen
コペンハーゲン(デンマーク)
Finland
フィンランド
Helsinki
ヘルシンキ(フィンランド)
France
フランス
Bordeaux
ボルドー(フランス)
Nice
ニース(フランス)
Paris
パリ(フランス)
Lyon
リヨン(フランス)
Strasbourg
ストラスブググ(フランス)
Marseille
マルセイユ(フランス)
Germany
ドイツ
Berlin
ベルリン(ドイツ)
Bonn
ボン(ドイツ)
Munich
ミュンヘン(ドイツ)
Dresden
ドレスデン(ドイツ)
Dusseldorf
デュッセルドルフ(ドイツ)
Frankfurt
フランクフルト(ドイツ)
Hamburg
ハンブルグ(ドイツ)
Hannover
ハノーバー(ドイツ)
Heidelberg
ハイデルベルグ(ドイツ)
Greece
ギリシャ
Athens
アテネ(ギリシャ)
Hungary
ハンガリー
Budapest
ブダペスト(ハンガリー)
Iceland
アイスランド
Ireland
アイルランド
Italy
イタリア 
Florence
フィレンツェ(イタリア)
Milan
ミラノ(イタリア)
Venice
ベニス(イタリア)
Naples
ナポリ(イタリア)
Netherlands
オランダ
Amsterdam
アムステルダム(オランダ)
Norway
ノルウェー
Oslo
オスロ
Poland
ポーランド
Warsaw
ワルシャワ(ポーランド)
Portugal
ポルトガル
Lisbon
リスボン
Romania
ルーマニア
Bucharest
ブカレスト(ルーマニア)
Russia
ロシア
Petersburg
ペテルスブルグ(ロシア)
Moscow 
モスクワ
Spain
スペイン
Barcelona
バルセロナ(スペイン)
Cordoba
コロドバ(スペイン)
Granada
グラナダ(スペイン)
Valencia
ヴァレンシア(スペイン)
Madrid
マドリッド(スペイン)
Sweden
スウェーデン
Stockholm
ストックホルム(スウェーデン)
Switzerland
スイス
Geneva
ジュネーブ(スイス)