- ベストアンサー
perlの構文でわからない部分があるので教えて下さい。
こんにちわ。パールの文で解らない部分があり困って居ります。$class->SUPER::new();ここの箇所なのですが、$classはどこから来たものなのかがわからなくて、メソッドの起動なのかとも思ったのですが、本も調べてみたのですがはっきりしません。お解りの方、どうか教えて下さい。よろしくお願いします。 package CGIBook::UserTracker; push @ISA,"HTML::Parser"; use strict; use URI; use HTML::Parser; 1; sub new{my($class,$path)=@_; my$id; if($ENV{PATH_INFO}and $ENV{PATH_INFO}=~ s|^/\.([a-z0-9_.-]*)/|/|i){$id=$1;} my$self=$class->SUPER::new(); $self->{user_id}=$id;$self->{base_path}=defined($path)?$path:""; return$self;}
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Perl でのオブジェクト指向の実現方法として、 オブジェクトにリファレンス(単なる名前の時もある)を割り付けて(bless する) オブジェクト(パッケージ(クラス)だったりインスタンスだったり)、のメソッドを $object->method() の形で呼び出せるようにしてあります。 この時、呼び出した関数には -> の左側の$object が暗黙的に渡されることになっています。 つまり $object->method(arg) とすれば、自動的に method($object, arg) として呼び出されるということです。 それを、 my($class,$path)=@_; で、受け取っているということですね。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
Perl でオブジェクト指向な本なら書いてありそうですが, まずサブルーチン new の先頭で my ($class, $path) = @_; としているので $class はこのサブルーチンの第1引数となります. で, SomeClass::new(...) SomeClass->new(...) new SomeClass(...) は全て new(SomeClass, ...) と書いたのと同じことになり, SomeClass が new の第1引数になります (あ~, この場合だと SomeClass は文字列リテラルとして扱われたかな?). このような読み替えは new に限った話ではないです.
お礼
有難うございます。Tacosanさんはすっきりと教えて下さり、とても解りやすかったです、助かりました。今日質問させて頂き理解できましたので締め切りさせていただくことができます。本当に有難う御座いました。
お礼
有難う御座います。BLUEPIXYさんの説明は親切な感じがしました。これからもう一度本も見直してみたいと思います。今日質問させて頂き理解する事ができましたので締め切りさせていただたいと思います。本当に有難う御座いました。