作者: Bruce.
日時: 2006/3/23(17:27)
Bruce.です。

davi writes:

> > 1+2+3という数式のちょうど逆だと思えばよいかと思います。
> > # 加算演算子は、左結合の2項演算子。1+2+3を、(1+2)+3と表現するなら、
> > # a=b=3は、a=(b=3)となります。
> 
> 演算子によって評価順序が変わるんだ、ってのは初めて
> 知りました。ありがとうございます。
> これは意識するようにしたいものです。

右結合する演算子には他に、**(べき乗), +=等の代入演算子があります。

> ええと、「感覚」のところ、もうちょっと教えてください。
> たとえば、$dest1に値を代入した直後に
> 
> |> $dest1 =~ s/%([a-fA-F0-9]{2})/pack('C', hex($1))/eg;
> 
> と書いてあると「初期化されちゃうじゃん」って思ったりする
> ことは勉強し始めの頃、ありませんでした?
> 私はいつも、そういう感じなんですが。

そこはもう慣れとしか云いようがないのではないでしょうか。

Perlの場合正規表現に関わる操作が深く文法に結びついているので、
操作の対象を指定するのにこういった表記を採用せざるを得なかった
だろうと思われるわけで。

Rubyみたいに

  /hogefuga/.match($dest1)

と書けたりすると(これは置換ではなくマッチングですが)、誤解の
入り込む余地が少なかったかもしれませんね。
#待て Perl6 ;-)

ちなみに置換だと

  str = "hello, world"
  str.sub(/hello/, "howdy")
  
のようになります。

いじょ。