# 標準入力から読みこんだファイルの書式が # 「樹種 直径2001年 直径2002年」と仮定する. # 読みこんだ行に成長量 (= 直径2002 - 直径2001) を加えて出力し, # 断面積合計もいっしょに計算していって最後に表示する. # BA とかいう指標計算専用のサブルーチン (C 言語でいう関数) sub calc_ba { my ($dbh) = @_; $ba = $dbh * $dbh * 3.1416 * 0.25; return $ba; } # まとめて初期化 ($total_ba_2001, $total_ba_2002) = (0.0, 0.0); # ファイル読みこんで計算するループ while (<>) { # 入力が続いてるかぎり繰りかえす chomp; # 行末の改行マークを削除 next if m/^#/; # 行頭が # だったらその行はとばす ($species, $dbh2001, $dbh2002) = split; # 行の分割・代入 $growth = $dbh2002 - $dbh2001; # 成長量の計算 # 表示 print "$species $dbh2001\t$dbh2002\t"; printf "%.2f\n", $growth; # 書式つき出力 # BA なる指標の計算していく $total_ba_2001 += calc_ba($dbh2001); # サブルーチン calc_ba $total_ba_2002 += calc_ba($dbh2002); # を呼び出している } # 書式つき出力 printf を用いる print "----------------------------\n"; printf "TBA %.2e %.2e\n", $total_ba_2001, $total_ba_2002;