[kansaipm] Re: Privateなサブルーチン

Yasushi Nakajima sey at jkc.co.jp
Thu Feb 7 03:07:32 CST 2002


 宮川さん、どうも。

Tatsuhiko> たぶん動作原理は異なるのだろうと思いますが、Attribute::Protected 
Tatsuhiko> というモジュールをCPANに登録しています。

 属性を使ったほうがきれいなのは確かですね。Private はシンボルテーブルを
実行時にいじってプライベートな名前そのものを隠してしまうという荒技をやっ
ています。

 Attribute::ProtectedやそのベースのAttribute::Handlerが、Perl5.6以降と
いう制限が残念です。5.005でもattrプラグマを使えばサブルーチンの属性は使
えるので、Attribute::Handlerの機能の一部は5.005でも動かすことはできそう
な気はするのですが…。でもやっぱり sub _private { use attr 'Private'; … } 
と書かねばならないのはちょっと嫌かな(^^)。

 …てなことで、Private に意味があるとすれば、Perl5なら使える(はず)と
いうところでしょうか。それとサブルーチン毎に指定しなくてもよいので、ずぼ
らな人向け(^^)かな。

 ところで、少し話は違うのですが、メソッドとして呼ばれたかどうかをサブルー
チンの側から知る方法ってあるでしょうか?つまり、Class::sub() と呼ばれた
のか、Class->sub() と呼ばれたのかを判別できるか、ということです。原理的
に無理かと思いつつ、何か方法がないかと時々思い出しては調べています。これ
ができると、sub func :NotMethod {…} と書いたものはメソッドとしては呼べ
ない、という制約が加えられそうです。

中島 靖




More information about the Kansai-pm mailing list