• 締切済み

perl の複雑(?)なクラス定義(データ構造)

以下のようなクラスを作成したいのですが、どのようにクラスとして定義して、どのように呼び出せばよいのでしょうか。特に「score」の部分の記述方法が良く分かりません。 オブジェクト指向(とくにPerl)はあまり経験がない初心者です。 -------------------- データ構造 name addr score--+-- math +-- english +-- science -------------------- クラス記述 package myClass; $ref_score->{math} = '30'; # <-- 正しい? $ref_score->{english} = '40'; # <-- 正しい? # ... sub new { my $class = shift; my $self={}; $self->{name} = 'tanaka'; $self->{addr} = 'tokyo'; $self->{score} = $ref_score; # <-- 正しい? bless $self, $class; } -------------------- メイン文 package main; $inst[0] = myClass::new(); $inst[0]->{name} = "OVERWRITE_NAME"; $inst[0]->{score}->{math} = "OVERWRITE_SCORE_MATH"; print $inst[0]->{module}."\n"; # 出る print $inst[0]->{score}->{math}."\n"; # オーバーライトした値は出るが... print $inst[0]->{score}->{english}."\n"; # 初期値のままの値は表示してくれない... 宜しくお願いいたします。

みんなの回答

  • Seravy
  • ベストアンサー率47% (118/249)
回答No.3

他の方が書かれているように、ハッシュを利用すればそのデータ構造は再現できます。 my $hash = { name => "", addr => "", score => { english => "", science => "" } } というように。クラスで使いたければ、クラス変数をこのような構造で作ればいいわけです。 しかし、スクリプトを見たところ、print $inst[0]->{score}->{english}はちゃんと表示されるはずです。。もういちど、自分のスクリプトを良く見直してみてはどうでしょう。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

全体に無茶苦茶だけど, それをおいても「想像した通り」の結果になりますよ. 「初期値のままの値は表示してくれない」ということはないですね. そもそも print $inst[0]->{module}."\n"; # 出る の「出る」の意味がわからんのだけど. module なんてどこでも設定してないよね. 何が「出る」の?

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.1

個別の誤りを指摘する以前に全体的に無茶苦茶過ぎます。 メソッド(オブジェクト指向)を使う気が無い(理解していない?)のに、オブジェクト指向向けのサンプルを参考にされたんでしょう、きっと。 あなたのやりたい事は、クラスで無くとも単なる Hash でできます。 主目的は、書かれたデータ構造を使用する事か、あなた自身がクラスを勉強したいのかどちらですか?

関連するQ&A

専門家に質問してみよう