一昨日から書いている「世間にいろいろ是非論はあるが、ぼくはなぜPerlが好きなのか、このさいいろいろ考えてみる」の続き。
昨日のまとめは以下の通り。

 ・Perlはプログラムを短く、手抜きで書く方法が必死で用意されている
 ・Perlにはマジックインクリメント(..)、ループを脱出するnextやlastなどのリッチな構文が多く用意されている
 ・こういうリッチな構文で書くプログラムは、楽だというだけではなく楽しい
 ・仕事は基本的に楽しくあるべきだ

さて今日は、Perlと言えば、これ、シジルについて議論する。
Pentagram sigil
シジルというのは
 ・$number、$string のようなスカラー変数に付く$(ドル記号)
 ・@arrayのような配列変数に付く@(アットマーク)
 ・%dictionaryのようなハッシュ(連想配列)に付く%(パーセント記号)
 ・&procedureのようなサブルーチンに付く&(アンパサンド)
のことだ。

シジル(sigil)というのは占星術の星座のマークのような神秘的な記号のことで印とも訳される。
(シルシという読みと発音が近いのだが偶然だろうか)


Perlの記号は昔はシジルとは呼ばず、ファニー文字(funny characters おかしな記号)と呼んでいた。

実際には「Perlの変数にはシジルが付く(そういう決まりがある)」という言い方は不正確であって、シジルは名前にくっついてその名前が指し示す空間を返す一種の演算子と捉えた方が良いが、ここでは立ち入らない。

なお、Perlではいくつかの特殊な変数が前もって定義されていて

 ・@_ ... サブルーチンの引数を参照する配列
 ・$. ... ファイルの行番号が入るスカラー
 ・$_ ... なにかあったときに実にちょうどいい感じに入る変数

などがある。詳しくは拙著「すぐわかるPerl」などを見て欲しい。
(宣伝かよ!)

$はスカラー(scalar)の頭文字Sを取ってドルマーク、@はアレイ(array 配列)の頭文字Aを取ってアットマークという説がある。
じゃあハッシュの%はどうなんだよという話であるが、これは棒を挟んで2つの○がにらめっこをしているからなんとなくと聞いた。
本当だろうか。
(&はどうなんだろ)

こういうシジルとか、特殊変数$_などはPerlアンチからは評判が悪い。
ところが、ぼくはこれが大好きであって、このおかげでPerlは非常に読みやすくなると思っている。
なぜなら、予約語をガッと書ける。

$printというスカラー変数を作って、印刷部数に使うことも出来るのだ。

 while ($print--) {
  print $contents;
 }

普通の言語ではこれは出来ない。
名前printをそのまま変数に使うと、組み込み関数printと衝突するからだ。
じゃあどうすればいいかというと、print_numとか、prtとか、myPrtとか、予約語と衝突しない言葉を慎重に選ばないといけない。

つまり、ある名前を作るたびにその名前がプログラミング言語にあったかどうかいちいち気にしなければならないし、予約語と衝突しないためだけにわざわざ英語として不自然な文字列を生み出さなければならないのだ。
ぼく的にはこっちの方がよほど回線ノイズに見える。

シジルのおかげで、自然な文章がそのままプログラムに書ける。

 if ($hot) {
  &cooldown;
 }

のように、フラグを形容詞にするのもいいね。

なぜシジルを使うのかLarry Wallが尋ねられて「Perlは成長する言語だから」と答えていた。
ある英語がある日は予約語ではなくても次の日には予約語になることがある。
そんなときのために、$が付けばそれはスカラー変数ですよと、前もって予約されているのはすばらしい。
loveという組み込み関数が実装される日に備えて、自分の考えたloveという名前にはシジルを付けるべきだ。

Subscribe with livedoor Reader
Add to Google
RSS
このエントリーをはてなブックマークに追加