日記
packageはスコープ宣言Edit

会社の本棚をあさったらPerlの入門書(エリー・クイグリー著「Perl入門第2版」)があったんで、この週末はそれを持ち帰ってお勉強することにした。ひとまず帰りの電車の中でオブジェクト指向周りの部分をざっと読んだところ、謎が多かったPerl5ライクな書き方の意味がずいぶんと理解できた。

package宣言ってのはてっきりclassの宣言なんだと思っていたんだけど、これは単なる名前空間(スコープ)の宣言なんだね。で、もちろんclassはclass内に限定されたスコープを持っていないとややこしいことになるから、classを利用する際にも必ず用いられるって話なのか。今までてっきりpackageと書かれていたら=classを使っている=oopで書かれたPerlプログラムだと思っていたよ。実際には名前空間を切り替えるためだけにpackageを使っていることが多いんだね。

ちなみに、Perlのデフォルト(暗黙)の名前空間はmainなんだそうな。で、

package hoge;

と書くと、それ以降にローカルで宣言された変数、関数はhogeの名前空間に所属することになる。他のpackageに所属する変数・関数を参照したい場合は、

hoge::foo

なんて感じで、どの名前空間に所属するのかを明記することでアクセスできる。さらにその状態で

package main;

とやると、またmain名前空間に戻すことができる。入門書では、その背後にある仕組み(名前空間を保持するためのハッシュ配列がある、とか)をいろいろ細かいことまで解説してあったけど、ふつうに使う分には下手にその辺まで覚えない方がいい気がする。Perlって詳しくなれば詳しくなるほど、他人にとっての可読性が悪いコードが書けるようになっちゃうからな。

Published At2002-01-25 00:00Updated At2002-01-25 00:00