calc は、手札の合計点数を計算するサブルーチンです。
- 絵札 (J, Q, K) は 10 点
- A は 1 点としても 11 点としてもよい
- カードの印(スペード/ハート/ダイヤモンド/クラブ)は考慮しない
- 合計点数が 21 点を超えると 0 点
#合計点数を計算する
sub calc {
local(@hands) = @_;
local(@numbers, $point, $na);
#数字を取出す
foreach (@hands) {
$_ =~ /[A-Z](\d+)/;#「アルファベットと 1 文字以上の数字」の数字部分を取出す
push(@numbers, $1);
}
foreach (@numbers) {
if ($_ <= 10) {
$point += $_;
$na++ if ($_ == 1);#A の枚数を数える
} else {#絵札は 10 点
$point += 10;
}
}
if ($point <= 11) {#A は 1 点としても 11 点としてもよい
$point += 10 if ($na);
} elsif ($point >= 22) {#合計点数が 21 点を超えていたら 0 点にする
$point = 0;
}
$point;
}







