- ベストアンサー
Perlでのselfの書き方
お世話になっています。 今他人が作ったPerlのプログラムを見ているのですが、 その中で、 パラメータを受け取る部分が、、、 sub hogehoge { my $self = shift; my ($one, $two) = @_; .. bra bra bra } と言う感じになっています。 またPerl初心者ですが、私の調べたところでは、 この二つの行は同等の意味なので、 sub hogehoge { my ($self, $one, $two) = @_; ... bra bra bra } と一行でかけてしまうと思うのですが、 $selfと$one, $twoを2行に分けている理由とか あるのでしょうか。 $selfだけ2行目の方法ではかけないとか? それともただ単に、 my $self = shift; と1行目に書くのがならわしだからでしょうか。 詳しい方が居ましたらよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まず最初に答えを書いてしまうと「どちらの形式でも動作するが, 論理的な意味を考えれば前者の方がイメージにマッチする」ということになるかと. メソッドを $obj->method($arg1, $args); のように起動した場合, メソッドの最初では @_ = ($obj, $arg1, $arg2) の関係にあります. しかし, 意味を考えれば @_ = ($arg1, $arg2) となっている方が自然であり, そのようにするにはまず最初に my $self = shift; のように shift を行う必要があります.
その他の回答 (2)
- zxcv0000
- ベストアンサー率56% (111/196)
No.1さん、No.2さんの回答もそのとおりですが、もうひとつ。 Perl のメソッドでは、$_[0] はオブジェクトと決まっています。 これを格納する変数名を $self に統一するのはソースを見易くする効果があります。 加えて、先頭に my $self = shift; と書く様に統一すれば、さらに見易くなります。 # 動かないソースコードを睨んでいる時、$self の格納が正しくできている事が一目で判るのは、重大なメリットです。
お礼
最初一行のほうがシンプルで いいのになんでだろう って思っていたのですが、 たしかにいわれてみればそのとおりですね ありがとうございました!
- kirikirkaz
- ベストアンサー率60% (21/35)
hogehogeの中でその後@_を使うのでなければ一緒だと思います。
お礼
ああなるほど @_そのままパラメータでループさせたい場合などは 先に、selfはとってしまったほうが便利なのですね! ありがとうございました
お礼
ありがとうございました! もやもやがとれました!