• ベストアンサー

オブジェクト指向処理

以下のようにnew{}の中で作成したstrをsub{}の中で利用したいのですが、どうすればよいでしょうか? perlでOOPするにあたり、参考になるような良書がありましたら教えてください。 new { $this = shift; my ($s1, $s2, $s3) = @_; my str = $s1.$s2.$s3; } sub { $this = shift; print str #new{}の中で定義したstr }

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

  • ベストアンサー
  • Dpop
  • ベストアンサー率51% (279/544)
回答No.3

#1 です。 まず、パッケージです。Test1.pm と言う名前で保存してください。 #!/usr/local/bin/perl package Test1; sub new { my $self = shift; my $data = { s1 => shift, s2 => shift, s3 => shift }; bless $data, $self; } sub disp { my $self = shift; print $self->{s1}. $self->{s2}. $self->{s3}; } 1; 次に、テストプログラムです。適当な名前で保存してください。 #!/usr/local/bin/perl package main; use Test1; my $obj = Test1->new('abc', 123, 'def'); $obj->disp; exit(0); bless で結びつけたオブジェクトに対して、パッケージ内で設定, 参照などの処理を行います。その考え方が理解できないと、Perlでのoopは分かり辛いです。#1で示したページは、その考え方を分かりやすく示している、非常に良いページです。 それから、#1ではらくだ本と書いたのですが、「プログラミングPerl Vol1, 2」の他に、「実用Perlプログラミング」もoopの説明としては分かりやすいです。 らくだ本レベルの説明ですが、図が結構分かりやすいです。

その他の回答 (2)

  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.2

>どのようにすればsub{}からnew{}のstrをprintできるか sub new {bless {'str'=>join '',@_[1..$#_]},shift} sub sub {print $_[0]->{'str'}} とかとかとか。 (There's More Than One Way To Do It) >OOPするにあたり それ以前にperlの文法を覚えるほうが先だと思う。 (質問に書いてあるコードはperlのコードとして成り立ってないし)

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

PerlのOOPは非常に独特な書き方をします。他の言語の記述方法は、あまり役に立ちません(特に、初学者の場合)。 次のページが非常に分かりやすいです。参考にして見てください。 http://www.pure.ne.jp/~learner/program/Perl_oo.html http://perl.infoware.ne.jp/documents/perlboot.ja.html 書籍ですが、僕はらくだ本を参考にしました。でも、ほとんどはWebから情報を得ました。

参考URL:
http://www.pure.ne.jp/~learner/program/Perl_oo.html,http://perl.infoware.ne.jp/documents/perlboot.ja.html
tomoremo
質問者

補足

回答ありがとうございます。 記述してありましたホームページを参考にsub{}からnew{}のstrをprintしましたがうまくいきませんでした。 申し訳ないのですが、添付したコードだと、どのようにすればsub{}からnew{}のstrをprintできるか具体的におしえいていただけるとうれしいです。

関連するQ&A