Perlのパッケージについてのメモ

読了まで:約1分


概要: Perl のパッケージについてのメモ。


Perl のパッケージを Javascript にできる限り忠実に移植するため、 Perl のパッケージの挙動を簡単にまとめてみる。

  • package = Class 名
  • デフォルトのパッケージ名は main
  • パッケージの有効範囲はその Block 内
  • パッケージ内のグローバル変数、関数はそのパッケージに属する

ぐらい?

ちなみに Javascript にはパッケージなんて無いんだけど、JSAN の場合、

  • Class 名 = グローバルオブジェクトの階層 (例:Foo.Bar = {}みたいな)
  • クラスに属する変数、関数は prototype に突っ込む(?)

のような感じだったりする。

さっき気づいたけど、Javascript でパッケージみたいなのを実装しようとすると、 下位の名前空間と上位の変数(若しくは関数)が衝突しやすいような気がする。 あ、でも Perl でも同じか?関数指向だと衝突しやすくて、オブジェクト指向だと衝突しにくいのかな?

ちょっと実験

package Foo::Bar;
sub Baz { print "aaa\n" }
package Foo::Bar::Baz;
sub new { bless {}, shift }
package main;
Foo::Bar::Baz();
print ref(Foo::Bar::Baz->new());

実行結果

aaa
aaa
Can't call method "new" without a package or object reference at - line 9.

こうなったということは、関数指向の package の下位にオブジェクト指向の package を作ろうとすると、 衝突することがある、ということか。

Ruby とかどうなっているんだろう?ちらっとコード見かけたことあるけど、

Foo::Bar.new()

こんな感じだったから衝突しないのかな?詳しくは知らないけど。うーん。

#FIXME

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。