「初めてのPerl」 4章 (サブルーチン)
そこそこ良いペースで勉強が進んでいる気がしているbonlifeです。この章で学んだのはsubで定義して&で呼び出すサブルーチンです。最後に評価された式の結果が自動的に戻り値になる、ってのに少し違和感があります。ここは注意しなきゃ。後、引数の渡し方も結構ルースですよね。なんでもかかってこい状態で、やってきたものを適宜処理する感じです。「不必要な制限を導入しない」哲学、恐るべし。レキシカル変数はしっかり使いこなさないとマズイですね。
では、演習問題です。今後はこの章で紹介されていたuse strictプラグマを使っていきます。
ex4-1.pl
- 数値のリストを受け取って、その合計を返すサブルーチン&totalを書く
#! perl -w use strict; my @fred = qw { 1 3 5 7 9 }; my $fred_total = &total(@fred); print "The total of \@fred is $fred_total.\n"; print "Enter some numbers on separate lines : "; my $user_total = &total(<STDIN>); print "The total of those numbers is $user_total.\n"; sub total { my $sum; foreach (@_) { $sum += $_; } $sum; }
出力結果は以下の通り。
ex4-1.pl The total of @fred is 25. Enter some numbers on separate lines : 1 2 3 4 5 ^Z The total of those numbers is 15.
正解を見て気付いたことは特になし。
ex4-2.pl
- 前の問題で作成したサブルーチンを使用して、1から1000までの合計を求めるプログラムを書く
#! perl -w use strict; my @number_list = 1..1000; print &total(@number_list) . "\n"; sub total { my $sum; foreach (@_) { $sum += $_; } $sum; }
出力結果は以下の通り。
ex4-2.pl 500500
正解を見て気付いたことは以下の通り。
- 出力をもう少し分かりやすくする
- 一時的にリストを配列に保存する必要はない (直接&totalにリストを渡すべき)
やはり分かりやすさに対する配慮が足りていないですね。気をつけなきゃ。後、必要以上に何でも箱(変数や配列)に入れたくなってしまう癖はPerlっ子っぽくないので直していこうと思います。おいおい、そりゃないぜ、的な記述を見つけた方はコメントにて教えてくださいませ。