オブジェクト指向perl

このエントリーをはてなブックマークに追加
1nobodyさん
モジュールを作ろうとしているのですが、何か分かりやすい参考書
やサイトないですか?なかなか見つかりません。
2 ◆unKo/nko :02/05/29 04:57 ID:???
今だ!2番ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
     ∧∧ ∧∧ ドドドドドド・・・・
    (゚Д゚ ,,) (゚Д゚ ,,)  ∧∧      (´´
    ⊂_⊂V⊂ ⊂ )⊂(゚Д゚ ,,)_/(´´
     Y /⊃ | .L⊃∧∧∪ _⊃(´⌒(´
   ドカ ∪∧∧J⊂(x _x⊂ノ(´⌒(´  (´´
 ドカ  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
    ズザ・・・
3nobodyさん:02/05/29 05:54 ID:???
>>1
他のオブジェクト指向言語の利用経験はあるの?

Perlのオブジェクト指向機能って変則的だから、オブジェクト指向の概
念がしっかりわかってないとツラいよ。もし経験が無いなら遠回りなよ
うでも一旦Ruby等の言語を使ってみる事をすすめる。
4nobodyさん:02/05/29 17:21 ID:???
『オブジェクト指向Perlマスターコース』。
あと自分の作ろうとしてるモジュールが既にないか調べとけ。

1に質問書く単発スレうざい。
5:02/05/29 20:58 ID:???
>>3
オブジェクト指向は初めてです。
はじめがperlなんで・・・
それにしても一旦rubyをやるとなると相当時間かかりますね。
それほど大変なんだろうな。ありがとうございます。

>>4
それ今日たまたま見た。6500円はちと高い。
作ろうとしているものが既にあるかどうか調べといてやるよ。
6nobodyさん:02/05/29 21:02 ID:???
>>4
おまえさ、もっと普通に会話できんの?
アドバイスはありがたいんだけど、見てるとむかつくんだよ。
ガチンコじゃね〜んだから、もっと普通にしろや。
74:02/05/29 21:25 ID:???
1に質問書く単発スレうざい。
1に質問書く単発スレうざい。
1に質問書く単発スレうざい。

3回書けば判っていただけますか?
それと「調べといてやるよ」なんてバカみたいなことは一々宣言しないで結構です。
『Perlモジュール活用ガイド』はモジュール作るのにはあまり役に立たないが、
Chapter10のデバッグ関連の所は一通り見た方がいい。
8nobodyさん:02/05/29 22:18 ID:???
1はオブジェクト指向したいわけじゃなくて、単にモジュールが作りたいだけか?
それなら手持ちの入門書で「モジュールを作る」あたりを読めば簡単。
9nobodyさん:02/05/30 01:26 ID:axCq6x30
もういいから Ruby 使いなさい。
101:02/05/30 02:00 ID:???
>>8
どちらもです。
11nobodyさん:02/05/30 07:17 ID:???
>>10
まずはオブジェクト指向してないモジュールを書くとこから始めれ。
$obj->method()形式で呼び出せないとカッコ悪いと思ってるかもしれな
いけど、全然そんな事ないから気にするな。

あと、オブジェクト指向ってのは見通しのよいプログラムをデザインす
るための大量の思想・概念・道具類・センス等の寄せ集めだから、文法
憶えてハイ修得ってわけにはいかない。生涯かけて学んでゆく規模だか
ら、数種類の言語を学ぶぐらいは当然。で、Perlでオブジェクト指向を
学ぶのは遠回りだ。時間浪費する事になるよ。
12nobodyさん:02/05/30 16:09 ID:???
SocketモジュールとIO::Socketモジュールの違いみたいなもんか。
13nobodyさん:02/05/31 17:01 ID:aUKFTjWZ
>>11
オブジェクト指向自体はそんなことめざしてません。
141:02/06/01 01:25 ID:???
>>11
とりあえずオブジェクト指向していないモジュール(つうか
自作のサブルーチンを集めたようなもの)はいろいろ作ったり
してます。いろいろ作っていくうちCGI_Lite等のようなものを
作りたくなった、というのもオブジェクト指向を勉強してみた
いと思った要因でもあります。
まずは「オブジェクト指向」というものはどんなものか?
ということから理解しないとだめなんすね?それにはrubyをまず
してみろと・・・長い道のりになりそうだけどがんばってみます。
アドバイスありがとうございます。
15 :02/06/01 19:57 ID:???
4は普通だと思うが・・・
ずいぶん、甘い板になったな。
初心者スレでCGIに関する質問もずいぶん多くなったし
16nobodyさん:02/06/03 00:17 ID:???
>15 そだねー。
おれなんか初心者スレに質問書いた時、回答が「基礎からやりなおせ」だけだった時があったからね。
答えるのがあたりまえとは思ってないけど、答えるんなら、も少し情報くれてもいいのにとは思った。
17use IO::Socket;:02/07/01 12:34 ID:???
駄スレ再利用計画
ここをオブジェクト指向Perl講座にしてみよう
18use IO::Socket:02/07/01 12:39 ID:???
クラス作るまで

1.クラスの生成
{ package ClassA;
}

2.コンストラクタ
メソッド名はなんでもいいが一般的にはnew
{ package ClassA;
sub new {}
}

3.コンストラクタ実装
ClassAのオブジェクトを返すには、自分のアドレスとデータメンバの入った
無名ハッシュをblessする

{ package ClassA;
sub new {
my $class = shift;
my $hash = {
data1 => shift,
data2 => shift,
data3 => shift
};
bless( %hash, $class );
}
}

4.あとは適当にメソッドなど追加する。以上
19use IO::Socket:02/07/01 12:48 ID:???
オブジェクト

1.オブジェクトの生成
$obj1 = ClassA -> new( $data1, $data2, $data3 );

「ClassA ->」は第一引数にClassAへの参照が入る。
よって@_は( ClassA, $data1, $data2, $data3 )となる。

2.オブジェクトの使用
1.で$objにClassAのオブジェクトが入っているのでこれを利用する。
$retvalue = $obj -> Method1();
もし、Method1がClassBのオブジェクトを返し、Method2がClassBに属する(以下略)なら
$retvalue = $obj -> Method1() -> Method2() -> Method3() ...;
と続けて出来る。これぞオブジェクト指向。
20nobodyさん:02/07/01 14:52 ID:???
無意味で分りにくい解説禁止。
21nobodyさん:02/07/03 10:50 ID:???
ハァ?
22ぺるにゃん:02/07/18 02:36 ID:???
まず Perl 以外のオブジェクト指向言語に触れてから、
Perl に戻ってきた方が理解が早いと思うにゃ。
だまされたと思って、Java とかやってみて。
23nobodyさん:02/07/18 09:32 ID:???
形無し言語でクラスとか多様とか言われてもぴんとこない・・・。
全部元クラスじゃんみたいな。
24nobodyさん:02/07/18 15:03 ID:???
>>17-19
こんな抽象的な説明でオブジェクト指向を理解できる初心者がいたら凄いな・・・
25nobodyさん:02/07/18 20:22 ID:???
>>23
キミのもっている「形無し言語」の定義と、
世間一般の「形無し言語」の定義は違うぞ。
26初期不良:02/07/18 22:48 ID:5Jy0ruag
おりゃPerlモジュール活用ガイドを読んでモジュール作ったけどね、
継承のためにこんなコンストラクタ作らなきゃならんのは
どうかと思う罠。Perl6 だとどうなるのか知らんけど。
sub new{
my $param = shift;
my $class = ref($param) || $param;
my $obj = {};
bless($obj, $class);
return $obj;
}
27nobodyさん:02/07/19 02:00 ID:???
>>26
$obj->new(...);
ってのを許すのはあまり好ましくないと言ってみる
28初期不良:02/07/19 03:49 ID:???
>>27
継承でそれが必要なんだとさ
29初期不良:02/07/19 03:52 ID:???
>>27
しかもこれの事をクローニングとか逝ってたしw
値をきちんとコピーする clone メソッドは別に作ったよ。
ろくに使わんけどなー
30nobodyさん:02/07/19 08:51 ID:???
>>28
継承で必要なのは第一引数でblessすることなんだけど…。
その本がダメなだけじゃないの?
31初期不良:02/07/19 13:22 ID:???
>>30
すまん俺の勘違いだったみたい。
継承のために必要というわけじゃないらしい。
てっきりスーパークラスのコンストラクタを呼び出すときに
そうなってしまうというのかと思ってた。

サブクラスでコンストラクタをオーバーライドしなかった場合
スーパークラスのコンストラクタが呼ばれなきゃならんけど
下の文法だとそれが行われないって問題だけみたい。
Subclass->new(); #OK
new Subclass; #NG
32nobodyさん:02/07/19 15:22 ID:???
>>31
デマ流すなよ。。。

#!perl
my @obj;
push @obj, Super->new();
push @obj, Subclass->new();
push @obj, new Subclass;
for my $obj (@obj) {
   $obj->compute();
}
exit;

package Super;
sub new {
   my $class = shift;
   my $self = bless {
      message => 'Hello World!'
   }, $class;
   $self->init();
   return $self;
}

sub init {
   my $self = shift;
   print $self->{message}, "\n";
}

sub compute {
   my $self = shift;
   print scalar(localtime), "\n";
}


package Subclass;
use base 'Super';
sub compute {
   my $self = shift;
   print scalar(gmtime), "\n";
}
33初期不良:02/07/19 19:14 ID:???
>>32
スマソ
確認しなかった俺が悪かった。
perl5004 とか収録している本だからかな?
new Subclass の構文は失敗する、と
258 ページにはっきりと書いてある。
34 ◆JAPH9PWA :02/07/19 21:21 ID:???
>>33
Perl5.003をベースにしたプログラミングPerl改正版でも、
new Subclassに問題があるようには読めないなぁ。
その本の作者、またはキミが激しく勘違いしていることは間違いないね。
35初期不良:02/07/19 23:00 ID:???
>>34
33 に書き忘れたけど完全に同意してるんで許して
36nobodyさん:02/11/21 12:09 ID:???
オブジェクト指向言語を勉強したいんですけど
どこか初心者用の解説サイトみたいなとこしらないっすか
37nobodyさん:02/11/21 12:11 ID:???
ってゆうか言葉とかも全然っす
メソッドって?クラスって?てな感じです

ちなみにC言語とかはそこそこ使えます
38nobodyさん:02/11/21 12:33 ID:???
>>37
んじゃ勉強すれ
JAVAの本なんかにみんないろんな方法でかいてあるよ、電気スタンドとか
コーヒーに例えて(わら
それがまたややこしいんだってことに気付かない著者ってステキだがな。
39nobodyさん:02/11/21 12:35 ID:???
>>38
その為のサイト教えてくれー
40nobodyさん:02/11/21 12:45 ID:???
JAVEは、オブジェクト=インスタンスだよね
Perlでも同じ?
41nobodyさん:02/11/21 15:14 ID:???
>>39
Perlオブジェクト指向
ttp://www.pure.ne.jp/~learner/program/Perl_oo.html
ざっと見てみたけど、いいサイトだと思う。
>>40
Perlでは、オブジェクト=インスタンス=ブレスされたハッシュ
Perlでは、クラス=モジュール+OO構文
42bloom:02/11/21 16:41 ID:kapC4rRR
43nobodyさん:02/11/21 18:05 ID:???
>>41
ありがとう
44nobodyさん:02/11/21 22:57 ID:CidwFuxc
#それぞれ一回ずつhogeと表示させたいのですが、
#どうすればいいか分かりません。教えてください。

my $b = new a();
print 'nothing';
$b->nothing();# hoge
print 'read';
$b->read();# hoge

package a;

sub new {
my $this = shift;
my $self = {};
bless $self, $this;
return $self;
}

sub read {
my $self = shift;
print "hoge\n";
}

AUTOLOAD {
my $self = shift;
$self->read();
}
45nobodyさん:02/11/22 04:39 ID:lEF6CpYA
助けてー
46nobodyさん:02/11/22 12:58 ID:syWpYZeW
メソッド呼ぶたびに二回表示されるのは何故なのですか?
お願いです、教えてくださいです。
47nobodyさん:02/11/22 14:00 ID:???
>>44
DESTROY がよばれてる?
48nobodyさん:02/11/23 11:22 ID:JSIskFPb
>>>>>>>>>47
直ったああああああああああありがとう!!
49nobodyさん:02/11/23 12:20 ID:iOXxXzff
50nobodyさん:02/11/24 06:31 ID:t0EFz7jF
get()って何する関数ですか?

出来れば詳しく解説してるサイトも教えてもらえるとうれしです。
51nobodyさん:02/11/24 06:38 ID:t0EFz7jF
>>50
自己解決しますた。すいません
52nobodyさん:02/11/24 13:56 ID:brwF5wjl
usestrickについて詳しいトコおせーてくだせー
53nobodyさん:02/11/24 15:33 ID:???
>>52
まさかとは思うが、もしかして、
use strict;
のことを言いたいのか?
54nobodyさん:02/11/25 00:03 ID:26KaLUcm
良いスレじゃないか。
ちなみに俺は↓でPerlのモジュールを学んだ。
http://www.melma.com/mag/85/m00014785/
55nobodyさん:02/11/29 01:20 ID:???
上のサイトでも紹介されてるけど
「オブジェクト指向Perlマスターコース」
は良い本だと思う。(個人的に一番)
だから誰か中古で買って。
会社の倉庫に眠ってた(新品同様)のを貰ったんだけど
以前個人的に買ったからダブってるんだよ。
56nobodyさん:02/11/29 11:18 ID:???
>>52
use strict;
はプラグマというものでコンパイラにヒントを与えるものだ。
慣習としてuseする際に大文字から始まるものはモジュールで
小文字から始まるものはプラグマらしい。

57山崎渉:03/01/15 13:43 ID:???
(^^)
58山崎渉:03/04/17 12:27 ID:???
(^^)
59山崎渉:03/04/20 06:05 ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
60山崎渉:03/05/22 02:09 ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
61山崎渉:03/05/28 17:16 ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
62山崎 渉:03/07/15 11:17 ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
63山崎 渉:03/08/02 02:34 ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
64nobodyさん:03/08/09 10:54 ID:n2jzMQj6
いろいろperlでCGI書いてます。
多言語の経験はなくフリーの物を改造からはじめて独学2年、perlのみです。
で、オブジェクト指向を勉強したいと思っています。
本は「初めての〜」「プログラミングperl」「CGIプログラミング」
「入門perlDBI」「EfectivePerl」などを読みました。
以下、僕が良く作っているスクリプトの構造ですが、これをオブジェクト指向で組み立てるとどんなふうになるんでしょうか。
なんとなく本を読んでいてぼんやりとイメージが掴めかけていますが、では
実際自分が書いているものが、オブジェクト指向だとどんな風になって
どんなメリットがあるのか、が具体的に見えてきません。
どなたかわかりやすく教えて下さいませんか?

#おこられたので二つに分けます。
6564:03/08/09 10:54 ID:n2jzMQj6

######
&main();
exit;
sub main{
if($mode eq 'view'){&view}
elsif($mode eq 'form'{&form}
elsif($mode eq 'regist'{®ist}
elsif($mode eq 'delete'{&delete}
}

sub view{
# 閲覧表示
}
sub form{
# フォーム表示
}
sub regist{
# データ書き込み
}
sub delete{
# データ削除
}
######

宜しくお願いします。
66nobodyさん:03/08/09 14:56 ID:???
>>64
おまえみたいな、甘えきった質問する奴は叩かれること必至ですが?
67nobodyさん:03/08/09 17:39 ID:???
>>64

俺も同感。

>>66

なんで?至極全うな質問だと思うけど。
68nobodyさん:03/08/09 17:40 ID:???
>>6が一番芝居クサい。
69nobodyさん:03/08/09 22:12 ID:???
>>64-65
最終的にif文からは逃げられない。せいぜいその部分を外に出すだけ。
そのあと機能ごとに同じ名前のメソッドを作ってポリモフィズム。
メリットはmainのソースをいじらなくてすむことかな。

package main;
my $app = FooBar::Factory->func($mode);
$app->run;
exit;

package FooBar::Factory;
use base 'FooBar';
sub func {
my ($mode) = @_;
if ($mode eq 'view') {
return FooBar::View->new;
} elsif ($mode eq 'Regist') {
return FooBar::Regist->new;
}
return FooBar->new;
}
package FooBar;
sub new { ref $_[0] ? ref $_[0] : $_[0] }
sub run {
my $self = shift;
$self->doing;
$self->output;
}
package FooBar::View;
use base 'FooBar'; sub doing { ... } sub output { ... }
package FooBar::Regist;
use base 'FooBar'; sub doing { ... } sub output { ... }
7069:03/08/09 22:13 ID:???
use書くの忘れたけどその辺は想像で補って
71nobodyさん:03/08/10 09:38 ID:???
>>69
ありがとうございます。
昨日「オブジェクト指向perlマスターコース」買ってきて読み始めましたが、
まだ言葉の意味から探っている段階です。
書いて頂いたもの、僕が出した例の「条件分岐によるサブルーチンの振り分け」
のその上に「オブジェクト指向」という概念、というかレイヤーをもうひとつ
かぶせている、という事でしょうか。

オブジェクト指向でプログラムを構築する、と言うのはある程度の規模でこそ
メリットが発揮される、というように感じますがどうなんでしょう。

今書いているものは2000行程ですが行の半分はHTML展開部分です。
で、進め方は設計の概略は最初に考えるものの細かな部分を含め、
どうしてもボトムアップな進め方になってしまってます。
こんな進め方は「オブジェクト指向」なプログラムには向かないような気がしています。
もっとトップダウンで進める、というか、初期の設計段階にもっと時間を
かける、というか。
僕が書いたやり方だとプログラムの構造が「フラット」な気がします。対して
書いて頂いたものはもっと「階層構造的」なきがします。
「フラット」なものは全体が煩雑になりがちですが、でもどうにでもいじくれます。
でも書いた本人以外にはわかり難い物になるでしょうね。
でも「階層構造的」なものは一部分の変更は容易で他の人にもプログラムの
全体構造はわかりやすいでしょうが、逆に言うといじくれる範囲が限定されてくる。
その分全体構造なり仕様を設計初期である程度明確にする必要がある、様な気がします。

> メリットはmainのソースをいじらなくてすむことかな。
これは僕が書いたやり方でもプログラムの構造が変わらない限り、同じだと
思うのですが、そういうことではない、という事ですか?
72nobodyさん:03/08/10 16:17 ID:???
>>71
オブジェクト指向はしっかりとした設計を先に練らないと役に立たないし、
そうしないと後から後からやってくる仕様変更に耐えられません。
(そうしたいい加減な設計に振り回された人達が
「オブジェクト指向は実践では役に立たない」と広める結果に)
だから何かを作る時に、プログラミングは最後の段階というか、
あとは予定通りにコードを書けば完成、というくらいになるまで書かない方がいいと思う。
ってそれが出来たら苦労しないんだけど。

> これは僕が書いたやり方でもプログラムの構造が変わらない限り、同じだと
> 思うのですが、そういうことではない、という事ですか?

コードは一つのファイルに全てを書かずに、モジュールに分割してください。
オブジェクト指向だろうがなんだろうが、綺麗なソースは変更点が少なくてすみます。

あとこれは嫌味ではなく、一度別のオブジェクト指向の言語に触れておいた方がいいです。
その方が理解が速い。Perlは独特だから。
7371:03/08/10 17:33 ID:???
>>72
ありがとうございます。
なるほど、やっぱりある程度の規模で今までより大きなプログラムの
設計概念から入れ、それでこそ生きる手法、って事でしょうか。

今、ある組織のサイトの為にperlで書いたCGIスクリプトが三つあるんです。
ひとつは主要なデータを抽出して対外的にアナウンスを出すもの。
二つ目は組織の各部署を統合しながらスケジュール管理するもの。
三つ目は活動記録などをリクエストされた形態で表示するものです。

三つはもともとその時その時の必要に応じて書いたもので、
もちろんデータも別に持っているのですが、ここに来て同じようなデータを
持っていたり、あるいはちょっと加工することでデータやルーチンを共有
した方が効率的だ、何とかならないかな、と思っていました。

こういう要求には「オブジェクト指向」って役に立ちそうですね。
もっと勉強しなければなりませんが、勉強するモチベーションはあがりそうです。

>一度別のオブジェクト指向の言語に触れておいた方がいいです。
これはよく聞きます。
まあもともとperl自体がオブジェクト指向を念頭に設計されてない、って事でしょうね。
オブジェクト指向、とは別にある方からJAVA勉強すれば、といわれているのです。
とりあえず今のところperlに一所懸命なものでなかなか手につかないのですが、
zdnetやらatmarkitやら暇を見つけてはJAVAについての記述を読んだりしていますが
なかなか難しいです。
どうしてもWEB関連での開発ということになるので、まずテスト環境から構築しなければならないですし。

ありがとうございました。
このスレももっと動いて欲しいですね。
74nobodyさん:03/08/11 02:19 ID:???
う〜ん いいやり取りだ。勉強になった。
75山崎 渉:03/08/15 22:39 ID:???
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
7671:03/08/28 12:36 ID:???
「オブジェクト指向Perlマスターコース」読みましたが、
結局いきなりオブジェクト指向なコーディングに入っても、
やっぱり漠然としてるもんで、atmarkitで、
「ここから始めるオブジェクト指向」、と「初歩のUML」読んでます。

なんとなく漠然としてた物がはっきりしてきたような。
本職設計業では良くある具現化手法なのでとっつきやすいし、
イメージつかみ安いですね。
77nobodyさん:04/01/10 06:31 ID:???
Perlのオブジェクト指向ってのはなんか妙に泥臭くないか?
慣れの問題かもしれんがかなり変則的な書き方してる気もする。
Perl6をとりあえず、待ってみる。もう少し他の言語のOOPに近づいてほしい。
今はとりあえず、利用する側として勉強するにとどめます。
78nobodyさん:04/08/26 15:36 ID:CuD1nIEH
VBしか使ったことの無い漏れに矢印だらけのPerlは不可解です。
79nobodyさん:05/02/03 03:22:49 ID:bOooCN0T
漏れはPerlがメインなのだが、VBは、Dictionaryだっけ?あれにひるんだ。
80nobodyさん:05/02/20 13:47:57 ID:7xcSHK1j
Delphiのみちょっとかじった事がある程度です。

delphiでいうclassの、プロパティ及びメソッドへのアクセスは全て「.」でした。
perlだと「->」と言う風に認識していました。

ところが最近見たソースで(今手元に無いのですが)、
perlのパッケージ(classと同義?)内の関数を
 &パッケージ名'関数名(引数)

と言う形で使っているものがありました。
ソースを見た限りでは、なんとなくclassをインスタンス化せずに
関数を使っている場合に「'」を使用しているように見えるのですが、
この認識は間違っていないでしょうか?

->
'
::

の違いが良く判りません。。
こういう記号ってgoogleだと検索できないし…
81nobodyさん:05/02/20 14:30:53 ID:???
' ≒ ::
82nobodyさん:05/02/20 14:47:41 ID:tXrbjTyl
(^-^::)->
83nobodyさん:05/02/20 17:58:25 ID:???
≒ってどういう意味だっけ
84nobodyさん:05/02/21 11:26:28 ID:???
大体等しい
85nobodyさん:05/02/22 05:38:41 ID:???
「オブジェクト指向Perlマスターコース」は良い本だ。
OOPじゃないPerlの解説も親切でわかりやすい。
俺はラクダ本を読んだことがないのでこれを読んでようやくlocalとmyの違いがわかった。
一般書籍レベルの解説書にはそれぞれの変数の振る舞いについては欠かれていたが、
本質的な定義について理解できたのは偏にこの本のお陰だ。
ちょっとでもOOPに興味があったら買うべし。

>>80
それはPerl4の頃の仕様じゃないか?
昔は名前空間の定義が曖昧だったためにパッケージ変数にアクセスするときに
「$パッケージ名'型グロブ」としていたときのものと思われる。
互換性を保つためにPerl5でもそれが読めるようだが、本質的にPerlオブジェクトは
$スカラにオブジェクトへのリファレンスを格納して->でデリファレンスするので
オブジェクトメソッドにアクセスするには->を使う。
ちなみに::はPerl5以降での名前空間の参照に用いる。

これでわかるか?てか合ってるかな?
8680:05/02/23 00:20:16 ID:???
>>85
ありがとうございます。
違いが良く判りましたです。
8785:05/02/23 02:16:19 ID:???
微妙に間違い。
×「$パッケージ名'型グロブ」
○「*パッケージ名'型グロブ」
たまに配布版掲示板CGIなんかでjcode.plをこの方法で使っているのを見かける。

わかったなら良かったよ・・・。
88nobodyさん:2005/04/11(月) 20:39:48 ID:gPOrHcmM
ちょっと言い方がおかしいかもしれませんが…

$class = new Class;として、
$class->func(...); と Class::func($class, ...); はほぼ同じときいたので、
ちょっと汚く見えますけどClass::func($class, ...);と書いても問題はないのでしょうか。

Class::func()のほうはただサブルーチンを呼び出しているだけなので
$class->func()より速いという結果になりました(当たり前ですけど…)。

$classが何のオブジェクトか分からない場合は->演算子を使うのですが、
$classが必ず"Class"のオブジェクトでしかありえない場合では普通に呼び出したいと思うことがあります。
89nobodyさん:2005/04/11(月) 20:43:51 ID:???
90nobodyさん:2005/04/13(水) 02:23:33 ID:???
>>88
そうでなく、静的かインスタンスかで理解したほうが。
コンストラクタでblessした$selfなんかの値は使えないよ。
91nobodyさん:2005/04/18(月) 17:58:39 ID:???
>>90
遅れてすみません。
Class::func("Class",...);はいいけどClass::func($class,...);は駄目ということですよね。
(あまり理解できていないような気がします、ちょっと不安…)
ありがとうございました。
92nobodyさん:2005/05/29(日) 01:27:45 ID:???
@ISA を直接いじらず use base するメリットってなんでしょうか。
93nobodyさん:2005/05/29(日) 16:52:06 ID:???
Perl5でOOPするのに良いモジュール無いかと思って検索してみたら
Class::HPLOOという便利な奴があるみたいですが、
皆さんは何を使ってますか?

ちなみにここを参考にしました。
http://naoya.dyndns.org/~naoya/mt/archives/000870.html
94nobodyさん:2005/06/27(月) 15:05:43 ID:EleSXDWp
パッケージをつかわずにOOPてか
クロージャとハッシュと無名関数だけでOOPを実装。
インスタンス、カプセル化、継承、多態性が実装されてるからOOPだよね。

sub String_new{
my $value = shift;
my $self;
$self = {
set => sub{$value=$_[0]},
value => sub{$value},
};
}
sub String2_new{
my $base = String_new(@_);
my $self;
$self = {
%$base,
set => sub{my$str=$self->{value}();$base->{set}($_[0]);$str},
length => sub{length $self->{value}()},
}
}
$s1 = String_new('abcde');
$s2 = String2_new('1234567');
print $s1->{value}(),"\n";
print $s1->{set}('wxyz'),"\n";
print $s1->{value}(),"\n";
print $s2->{value}(),"\n";
print $s2->{set}('890'),"\n";
print $s2->{value}(),"\n";
print $s2->{length}(),"\n";
95nobodyさん:2005/06/29(水) 05:34:38 ID:???
perlで一番つかわれてるフレームワークってなに?
96山碕渉:2005/07/05(火) 00:52:32 ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山碕渉
97nobodyさん:2005/12/17(土) 00:54:36 ID:Nve1rpZB
もうperl5 oopは死んだのですか?
98nobodyさん:2005/12/17(土) 05:11:53 ID:L4AdeMAk
勝手に殺すな
99nobodyさん:2005/12/17(土) 15:31:32 ID:???
いやあ、このスレが死んでいたので・・・
100nobodyさん:2005/12/29(木) 17:34:47 ID:Nhlmh3Zf
getメソッドで受け取った値を、Parser.pmモジュールの_parse_query関数で受け
取って解析したあと、解析した値を他のモジュールから呼び出すにはどういう記述
をすれば良いですか?
101nobodyさん:2005/12/29(木) 17:35:40 ID:Nhlmh3Zf
ちなみに、Parser.pmはこんな感じです↓

package Common::Parser;

sub new {
my $class = shift;

my $self = {
query => undef
};

bless $self, $class;

if ($ENV{'CONTENT_LENGTH'} or $ENV{'QUERY_STRING'}) {
$self->{query} = $self->_parse_query;
}
}
102nobodyさん:2005/12/29(木) 17:36:58 ID:Nhlmh3Zf
sub _parse_query {
my $self = shift;

my ($data, $query);

if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $data, $ENV{'CONTENT_LENGTH'});
} else {
$data = $ENV{'QUERY_STRING'};
}

foreach (split(/&/, $data)) {
my ($name, $value) = split(/=/);

$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg;

$query->{$name} = $value;
}
}

1;
103nobodyさん:2005/12/29(木) 18:21:13 ID:???
getter書く。

というかCGI.pm使えば?
104nobodyさん:2005/12/30(金) 09:29:38 ID:???
自分で parse すんなよw
105nobodyさん:2005/12/30(金) 13:18:26 ID:WC8C4E+l
お二人様の言う事が暗号みたいでいまいち理解できませんが、なんとか
頑張ってみたいと思います。
解答ありがとうございました!
106nobodyさん:2005/12/30(金) 13:58:41 ID:WC8C4E+l
なんどもすみません;;
>>101のように、コンストラクタの中に

if ($ENV{'CONTENT_LENGTH'} or $ENV{'QUERY_STRING'}) {
   $self->{query} = $self->_parse_query;
}

のように、本来のコンストラクタの仕事である関連付け以外の処理をさせても良いのですか?
107nobodyさん:2005/12/30(金) 18:10:38 ID:???
良いも悪いもねーよ

PerlでのOOの勉強目的でやってんならCPANモジュールの中身見て
どんなことをやってるか参考にしたらいいよ
108nobodyさん:2006/01/01(日) 16:23:29 ID:???
過疎ってるなぁ
109nobodyさん:2006/04/24(月) 03:56:56 ID:???
かそあげ
110nobodyさん:2006/05/07(日) 21:19:51 ID:???
保守
111nobodyさん:2006/05/21(日) 05:12:37 ID:???
実際のところ、Perlでのオブジェクト指向を学ぶには
書籍以外に何を見たらいいの?
自分はCGIのためにPerl始めたんだが
そこらで配布されてるCGIにオブジェクト指向が取り入れられてる例を見たことがない。

適材適所とは思うけど、小規模なスクリプトだからってオブジェクト指向イラネってことも
ないと思うんだけど・・・
身近で、興味が持てる例があれば理解の助けになると思うのに
それともフリー配布のCGIに教材的な面を望むのが無謀なのか。
112nobodyさん:2006/05/21(日) 07:06:33 ID:???
>111
まず最初に、その検索能力の無さをなんとかしろよ
113nobodyさん:2006/05/21(日) 08:38:29 ID:???
わかった
114nobodyさん:2006/05/21(日) 08:48:25 ID:???
またスレストか
115112:2006/05/21(日) 12:27:40 ID:???
>113,111
しょーがねーな
なんか反応が素直だからいくつかURL貼ってやるよ
ttp://serennz.cool.ne.jp/sblog/
ttp://apps.cside.com/
あとはここで好きなだけ探せ
ttp://search.cpan.org/
116nobodyさん:2006/05/21(日) 17:04:31 ID:???
>>115
ありがとう。がんばる。
117nobodyさん:2006/05/21(日) 17:10:48 ID:???
>>115
sb のサクーシャ?
なんか、汚い書き方多くて見る気がしないぽ。
118112:2006/05/21(日) 18:49:49 ID:???
>117
俺は
>そこらで配布されてるCGIにオブジェクト指向が取り入れられてる例
を紹介しただけ。
綺麗な書き方のはお前さんにまかせた。
119nobodyさん:2006/05/21(日) 18:58:38 ID:???
>>118
そんな無責任な態度でいいもんかね?
120nobodyさん:2006/05/21(日) 21:26:43 ID:???
許す
121nobodyさん:2006/08/09(水) 14:48:38 ID:???
>>115
># 2.00a [2004/11/17] generated ... oh, it's my birthday.
痛いコメントハケーン
122nobodyさん:2006/08/19(土) 14:23:39 ID:???
>121
作者の誕生日にはわざわざお知らせを出すようになってる
もっと痛いスクリプトも世の中にはあるぞ。
オブジェクト指向は取り入れられてないからこのスレには書かないが。
123nobodyさん:2006/08/20(日) 00:59:39 ID:???
> 作者の誕生日にはわざわざお知らせを出すようになってる
> もっと痛いスクリプトも世の中にはあるぞ。
> オブジェクト指向は取り入れられてないからこのスレには書かないが。

存在を知らせる必要すらなくね?
124nobodyさん:2006/08/20(日) 23:14:02 ID:???
>>122
それ和みスレで見たことある
125nobodyさん:2008/01/20(日) 12:39:36 ID:eQx+pRRH
久しぶりにageてみる。
126nobodyさん:2009/07/02(木) 00:20:51 ID:???
最近Perlのオブジェクト指向勉強しだした
サブルーチンにリファレンスでぐちゃぐちゃだったコードがすっきりした
単純にうれしい
127 忍法帖【Lv=40,xxxPT】(4+0:8) 【28.1m】 電脳プリオン ◆3YKmpu7JR7Ic :2012/09/30(日) 17:38:58.16 ID:??? BE:405408285-PLT(12079)

  ∧_∧
  ( ・∀・)      | | ガガッ
 と    )      | |
   Y /ノ      .人
    / ) .人   <  >_∧∩
  _/し' <  >_∧∩`Д´)/
 (_フ彡 V`Д´)/   / ←>>63
            / ←>>59
128nobodyさん:2013/08/15(木) NY:AN:NY.AN ID:???
$obj = $class->new(@_);
129nobodyさん
ぬるぽ