Perlの罠 – =>とコンテクスト 追記

投稿者: | 2007年5月30日

 少し反応をいただいたので追記。

 木村さんの「‘=>’の右辺にあるからリストコンテキストになるというのはちょっと違うような気がします。」について。実装の話ではなくあるべき仕様の話をしています。lexerの段階でカンマとしてpushしてしまい、二項演算として左右のオペランドの結合を保存しないのであれば、list contextになるのは道理ですね。実装から見て、さほど練られた仕様ではなさそうだということはわかりました。ありがとうございます。

 みすらんさんの「そんなときにはscalarを使えばいいと思う。=>にスカラーコンテキスト提供されたりしたらリスト演算子で使えなくなって不便、とか。」(リンク先はいずれ流れて消えちゃうみたいです)について。リスト演算子はカンマがあるのでいいんじゃないでしょうか。二重矢印を使うからには、左にあるものと右にあるものの関連を示唆しているはずですが、解釈がそれを逸脱するのはいただけないと思います。

 そうそう、二重矢印の右に配列を置く例に思い当たった。「$obj->send(some_method => @arguments)」みたいな書き方はたまに見る。メソッド名はちゃんと引用符で括って、二重矢印でなくカンマを置けばいいのに、こういう書き方が好きなPerlプログラマは多いみたい。しかし、二重矢印で書くなら右はarrayrefの方がふさわしいんじゃないかと思う。

 文法や仕様でなく、挙動や実装の方に寄りかかる習慣が常態化しているのは気持ち悪い。でも、裏をかくのが楽しいのは事実。Perl5が出たとき、危なっかしいギミック満載でドキドキしたのを思い出す。13年も前か、と言いかけて、あれ、たったの13年前か、と思った。この世界は進むのが速い分、振り返ると実時間は大して経っていないんだな。

カテゴリー: Tech

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です