- ベストアンサー
perlはc++のようなクラスや構造体は作れない?
c++で class hoge{ hoge(); int menber; }; というようなクラス定義と hoge x; というようなクラス変数定義のようなのは、Perlではできないのでしょうか。 メンバ関数はべつにいいのですが、その構造を配列にして管理したいのです。 たとえば、個人情報のような。 Perlではスタティックなメンバしか持てないと聞いたのですが、本当ですか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ANo.#2で頂いたお返事への回答です。 「メンバ変数hogeをもつhogeクラス」じゃなくて「メンバ変数menberをもつhogeクラス」でしたね。メンバへのアクセスはこの場合、 $hoge->{member} = 5; printf 'Member is %d', $hoge->{member}; __END__ ってな感じです。裸のハッシュにアクセスするよりも、アクセッサメソッドをちゃんと作ってあげた方が良いですけどね。 sub member { my $self = shift; $self->{member} = shift if @_; $self->{member}; } Hogeクラスにこのアクセスメソッドが有れば、 $hoge->member(5); printf 'Member is %d', $hoge->member; といった記述が出来ます。詳しくは前出のURLに掲載されている「初心者のためのオブジェクト指向チュートリアル」http://perl.infoware.ne.jp/documents/perlboot.ja.html を見たり、Perlのオブジェクト指向機能についてのメーリングリスト 「Object-oriented with Perl」http://www.freeml.com/ctrl/html/MLInfoForm/perl-oo あたりで質問してみてください。 ポケットリファレンスの類は、perldoc perlfuncなどを単純に和訳しただけなので、こーいうときには不向きです。O'REILLYの「プログラミングPerl」や「実用Perlプログラミング」、ASCIIの「Effective Perl」などの書籍がこーいう時には役立ちます。
その他の回答 (2)
んーっと、メンバ変数hogeをもつhogeクラスを定義・使用したいって意味でしょうか?そうだとすると package Hoge; sub new { my $class = shift; bless { member => 0, }, $class; } my $hoge = Hoge->new; __END__ ってな感じ。 スタティックなメンバしかもてないってのはガセです。
- 参考URL:
- http://perl.infoware.ne.jp/
お礼
おおっ! できるんですかー! 締め切らないで待っていたかいがありました。 >メンバ変数hogeをもつhogeクラス んんん? ではなくて、メンバ変数menberを持つクラスなのですが、この構文ではそうできますか? ポケリファでpackageとblessを調べたのですが、いまいちよくわからなかったので、これらの文の意味とか動作とかをご教授お願いします! また、できたクラス変数のメンバへのアクセス方法などは $hoge::menber = 5; とかでいいのでしょうか? もしくは$hoge->menberですか? その辺もできれば教えてください。
はい(^_^; その通りです。 ですんで、通常は多次元配列か、連想配列でやることになるかと思います。 Perl5 はサブセットでデータベースが使えるので、それを使うのもいいかもしれません。 俺もデータベース管理のわずらわしさで似たようなこと考えて、require して使うSQLモジュールを作ったりしましたよ。
お礼
そうですか~。 やっぱり、ハッシュのリファを配列に入れるぐらいしか手段がないですかねぇ。 データベースのハッシュのリファを入れてもいいみたいですね。 いろいろ試してみます。 でも、遅そうです。
お礼
おー、びっくりです。 これならインスタンスを配列に入れてデータ管理とかできますね。 でも、結局は文字列を解釈してメンバにアクセスするという領域を出ていないような。 しかし、それこそオブジェクト指向ですね。 VBのクラスをVariant型の変数に入れた場合、メンバへは文字列を使ってアクセスするのですから。 いやー、どうもありがとうございました。