「初めてのPerl」: 5章ハッシュ, 6章入出力の基本, 7章正規表現の基本

今日は3章進みました。ここまで読んで感じたことがあります。それは筆者は本当に説明が丁寧で上手だということです。CGI+Perlを中途半端に扱っている技術書とは比べ物になりません。私の運が悪かったのでしょう、きっと。もっと早くにこの本に出会っていれば良かったと思う今日この頃です。

5章 ハッシュ

5章ではハッシュを勉強しました。脚注を読んでへぇ〜と思いました。こんな歴史があったのですね。

その昔、ハッシュは「連想配列」(associative array)と呼ばれていました。しかし、1995年ごろに、タイプするにも字数が多すぎるし、発音するにも長すぎるという意見がPerlコミュニティーで大勢をしめたために、「ハッシュ」という名前に変更されました。

肝心のハッシュですが、PHP連想配列を何度も使ったことがあるので、違和感なく読むことができました。

ハッシュでキーとその値を関連付けるために使われる「=>」は「太い矢印」っていうのですね。本当ですかねぇ?また「細い矢印」というのもあって、それは「->」のことらしいです。C++ではこれを「アロー演算子」って言いますよね、確か。この本の洋書を見る機会があれば、これらの矢印を英語ではどのように表現されているのか見てみたい、とちょっとだけ思ったのでした。

6章 入出力の基本

次の6章では入出力の基本が説明されていました。今までにLinuxFreeBSDといったUNIX系OSを使ってきたので、標準入力、起動引数、標準出力は問題なく理解できました。

この章で登場したダイヤモンド演算子(<>)にも、へぇ〜な脚注がありました。Perlの生みの親「Larry Wall」さんのお嬢さん(当時8才)がダイヤモンド演算子を見て「これってダイヤモンドよ、お父さん」と言ったそうです。それで<>にはダイヤモンド演算子という名前がついたらしいです。確かに、ダイヤモンドみたいな形してますねぇ。お嬢さんは、センスいいですね。

あと、printfの使い方の説明も紹介されていましたが、Cを知っているので、何の問題もなく理解できました。

この章の練習問題の2つ目の答えを自分で考えてから解答を見ると、まだまだ勉強が足りないなぁと思いました。その問題とは以下のようなものです。

文字列のリストを1行に1個ずつ別々に読み込んで、その文字列を20文字幅のカラムに右寄せで表示するプログラムを書いて下さい。出力が正しいカラムに合っていることを確認するために、目盛り付きの「物差し」も出力してください。[...]」

それで以下は私が、目盛り付きの「物差し」の部分を書いたしょぼいコードですが、解答は1行でビシッと書いてあります。私的には本書の解答のコードはスッキリしていて、Perlらしいコードだと感じました。(ここでは解答のコードは載せません)

foreach (1..40) {
    print $_%10;
}
print "\n";

そうそう、練習問題でちょっとした応用問題には「[...] 追加点を差し上げましょう。」と書いてあり、学校で勉強している気分になれます。って私だけでしょうね、きっと。

7章 正規表現の基本

やっと正規表現です。正規表現にはじめて出会った時は、魔法のような道具だと思ったことを覚えています。こんな便利なものを発明した人は天才ですね。

この章の練習問題の解答に以下のような説明が書かれています。

[...] 正規表現は強力ですが、美しくありません。また、正規表現は、Perlが「write-onlyな言語」だと非難される原因の1つです。しかし、そのような非難を浴びないように、自明でないパターンの近くには、説明をコメントとして入れておきましょう。その一方で、正規表現を長年使っている間に、あなたにとっての「自明」の定義が変化していくことでしょう

昔に、Perlで書かれたコードを見て、ギョッとしたことがあります。多分、正規表現で書かれたわけのわからない記号の羅列の部分を見た時です。「なんだこれは?」っと。確かに「美しくない」と昔の自分も感じました。筆者が忠告するように、正規表現の部分には、ちゃんとコメントを書く習慣をつけないといけないなあと思いました。また、「自明」の定義が変化するくらい、正規表現マスターになれたらいいな、なんてことも思いました。

この調子でPerlの勉強続けていきます。

初めてのPerl