OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

perlはc++のようなクラスや構造体は作れない?

  • 暇なときにでも
  • 質問No.198676
  • 閲覧数126
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 77% (530/685)

c++で

class hoge{ hoge(); int menber; };

というようなクラス定義と

hoge x;

というようなクラス変数定義のようなのは、Perlではできないのでしょうか。
メンバ関数はべつにいいのですが、その構造を配列にして管理したいのです。
たとえば、個人情報のような。
Perlではスタティックなメンバしか持てないと聞いたのですが、本当ですか?
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.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」などの書籍がこーいう時には役立ちます。
お礼コメント
haporun

お礼率 77% (530/685)

おー、びっくりです。
これならインスタンスを配列に入れてデータ管理とかできますね。
でも、結局は文字列を解釈してメンバにアクセスするという領域を出ていないような。
しかし、それこそオブジェクト指向ですね。
VBのクラスをVariant型の変数に入れた場合、メンバへは文字列を使ってアクセスするのですから。

いやー、どうもありがとうございました。
投稿日時 - 2002-01-23 09:47:00
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1

 はい(^_^; その通りです。  ですんで、通常は多次元配列か、連想配列でやることになるかと思います。  Perl5 はサブセットでデータベースが使えるので、それを使うのもいいかもしれません。  俺もデータベース管理のわずらわしさで似たようなこと考えて、require して使うSQLモジュールを作ったりしましたよ。 ...続きを読む
 はい(^_^; その通りです。

 ですんで、通常は多次元配列か、連想配列でやることになるかと思います。
 Perl5 はサブセットでデータベースが使えるので、それを使うのもいいかもしれません。

 俺もデータベース管理のわずらわしさで似たようなこと考えて、require して使うSQLモジュールを作ったりしましたよ。
お礼コメント
haporun

お礼率 77% (530/685)

そうですか~。
やっぱり、ハッシュのリファを配列に入れるぐらいしか手段がないですかねぇ。
データベースのハッシュのリファを入れてもいいみたいですね。
いろいろ試してみます。
でも、遅そうです。
投稿日時 - 2002-01-15 14:13:37


  • 回答No.2

んーっと、メンバ変数hogeをもつhogeクラスを定義・使用したいって意味でしょうか?そうだとすると package Hoge; sub new {   my $class = shift;   bless {     member => 0,   }, $class; } my $hoge = Hoge->new; __END__ ってな感じ。 ス ...続きを読む
んーっと、メンバ変数hogeをもつhogeクラスを定義・使用したいって意味でしょうか?そうだとすると

package Hoge;

sub new
{
  my $class = shift;
  bless {
    member => 0,
  }, $class;
}

my $hoge = Hoge->new;
__END__

ってな感じ。

スタティックなメンバしかもてないってのはガセです。
お礼コメント
haporun

お礼率 77% (530/685)

おおっ! できるんですかー!
締め切らないで待っていたかいがありました。

>メンバ変数hogeをもつhogeクラス
んんん? ではなくて、メンバ変数menberを持つクラスなのですが、この構文ではそうできますか?

ポケリファでpackageとblessを調べたのですが、いまいちよくわからなかったので、これらの文の意味とか動作とかをご教授お願いします!

また、できたクラス変数のメンバへのアクセス方法などは

$hoge::menber = 5;

とかでいいのでしょうか?
もしくは$hoge->menberですか?

その辺もできれば教えてください。
投稿日時 - 2002-01-22 14:40:35
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ