In message "[ruby-list:10302] perl2ruby.html"
    on 98/10/23, OHARA Shigeki <os / iij.ad.jp> writes:

|大原です。
|
|先日、Perl と Ruby の違いについて調べる機会があって、
|関谷さんのページがとても参考になったのですが、
|ちょっと気付いた点がありましたので。

|rbc0> a = 'aaa'
|"aaa"

a は、"aaa" というオブジェクトを示しています。

|rbc0> b = a
|"aaa"

b も a ではなく "aaa" というオブジェクトを示し
ています。

|rbc0> a = 'ccc'
|"ccc"

このとき a には、新しいオブジェクト "ccc" を示
しています。b は、示すオブジェクトは変わりませ
ん。a を間接的に参照している分けではありません。

|rbc0> b
|"aaa"
|rbc0> a = [1, 2]
|[1, 2]
|rbc0> b
|"aaa"
|rbc0> 

|どうも違うような気がするのですが、
|なにか私が勘違いをしているのでしょうか?

たぶん、b は、「a の示す先」を常に a を間接的
に使用して参照していると思われているようなので
すが、

b = a

では、「a の示す先のオブジェクト」を b に定義
するだけです。a が示すオブジェクトが変わっても、
それは b には影響しません。

オブジェクトを直接修正するようなことをした場合
は、そのオブジェクトを参照しているすべての変数
に影響がありますので、次のようになります。

$ irb
irb(main):001:0> a = "aaa"
"aaa"
irb(main):002:0> b = a
"aaa"
irb(main):003:0> a.sub!("aaa", "bbb")
"bbb"
irb(main):004:0> p b 
"bbb"
nil

--
WATANABE Tetsuya HP Japan
 e-mail  Tetsuya_WATANABE / hp.com
         tetsu / jpn.hp.com