Perlの勉強始めました

昨夜、通称リャマ本こと「初めてのPerl」が届きましたよ、bonlife。(この本がラクダ本だと思ってたのですが、あの激しく重そうな通勤勉強には向かない方がラクダ本だったんですね…。)はてブ人気エントリーをボンヤリと眺めていたら以下のような記事がありました。

私が思うに、RubyPerlの守備範囲を何なくカバーしてしまっているので、 Rubyが使えるとPerlは要らないんですよね。すでにPerlで書かれているプログラムを別にすれば。

ガビョーン。いきなりもうPerl駄目だなんて!せっかく今朝から勉強始めたのになぁ。さっそくRubyに…という気分になりましたが、そもそも会社のAIXではRubyが使えないのでPerlを勉強し始めたんですよ。ということで「Rubyが使えると」という条件を満たしていないのでセーフ。と思い込むことにしました。まぁ、本格的にPerlで何かしようと考えてるわけじゃないですし。(というより、何かを本格的にやるほどのアイディアもスキルもないのですが…。)
ちなみに、本日は2章まで読み終わりました。(ちゃんと演習問題もやりましたよ!)Perlってboolean型(bool型)がないんですね。未定義値のundefってなんだかちょっと怖い感じです。なんとなく書いたコードがなんとなく動いちゃいそう。(それはそれで楽で良いのかな。)chompもなんだか慣れない感じです。元のスカラー変数の末尾の改行を削除した値を返すわけじゃなくて、スカラー変数の改行を削除してしまうんですね。ふーん。とまぁ、こんな感じで思いついたことをメモしていこうと思います。
リャマ本だけなら当初の目標期間の2ヶ月は要らなそうですね。通勤時間だけでも1ヶ月弱でなんとかなりそうな予感。(とか言いつつ、2ヶ月かかったりするかもしれません。)
ex2-3.pl

  • 半径を入力させて、円周を表示する
  • 入力値が負の値の場合、0として扱う
#! perl -w
print "半径を入力してください。 : ";
chomp($hankei=<STDIN>);
if ( ! $hankei ) {
	print "半径が入力されませんでした。\n";
	exit 1;
} elsif ( $hankei < 0 ) {
	$hankei = 0;
}
$pai = 3.141592654;
$enshu = 2 * $pai * $hankei;
print "半径 $hankei の円周の長さは、 $enshu です。\n";

出力結果は以下の通り。

半径を入力してください。 : 12.5
半径 12.5 の円周の長さは、 78.53981635 です。
半径を入力してください。 : -12.5
半径 0 の円周の長さは、 0 です。

正解を見て気付いたことは以下の通り。

  • $paiじゃなくて$pi
  • 変数名はローマ字じゃなくて英語の方が格好良い
  • 変数の宣言(というより設定)はプログラムの先頭で

ex2-4.pl

  • 数字を2つ別々に入力させ、その積を出力
#! perl -w
print "数値を入力してください。(1) : ";
chomp($input1=<STDIN>);
if (! $input1 ) {
	print "数値が入力されませんでした。\n";
	exit 1;
}
print "数値を入力してください。(2) : ";
chomp($input2=<STDIN>);
if (! $input2 ) {
	print "数値が入力されませんでした。\n";
	exit 1;
}
$seki = $input1 * $input2;
print "$input1$input2 の積は $seki です。\n";

出力結果は以下の通り。

数値を入力してください。(1) : 2
数値を入力してください。(2) : 3
2 と 3 の積は 6 です。

正解を見て気付いたことは特になし。(まだこの章では正規表現も教わっていないことになっているので、入力値のチェックは特に行っていません。)
ex2-5.pl

  • 文字、数字をそれぞれ別々に入力させる
  • 文字を数字の回数(行数)だけ表示
#! perl -w
print "文字列を入力してください。 : ";
chomp($text=<STDIN>);
if (! $text ) {
	print "文字列が入力されませんでした。\n";
	exit 1;
}
print "繰り返し回数を入力してください。 : ";
chomp($repeat_number=<STDIN>);
if (! $repeat_number ) {
	print "繰り返し回数が入力されませんでした。\n";
	exit 1;
}
print "$text\n" x $repeat_number;

出力結果は以下の通り。

文字列を入力してください。 : bonlife
繰り返し回数を入力してください。 : 5
bonlife
bonlife
bonlife
bonlife
bonlife

正解を見て気付いたことは以下の通り。

  • 最終的な出力が改行付きなので、入力値をchompする必要なし

こんな感じでヘタレなソースを書いてみますよっ!
追記です。id:ablaboさんが過去に同じようなことをやってますね。練習問題解いた後、回答チェック後にablaboさんの回答もチェックしてみようっと。