$OVERLOAD{"="
} は、3 引数の関数へのリファレンスです。すなわち、見
かけ上は普通の %OVERLOAD
の value
と同じです。このサブルー
ティンの特殊な点は、(他の多くのメソッドが期待されているように)
bless
された、パッケージへのリファレンスを返す必要がありませんが、
被参照した引数の新しいコピーをかえします(ただし、See section 多重定義のバグ,
をみてください)。この演算は、
$a=$b; $a++;
のような、他のリファレンスとオブジェクトを共有するリファレンスに対して、
ミューテーターを使うときに呼び出されます。これを、 $a
を変更し、
$b
を変更しないようにするために、 $$a
の新しいコピーを作り、
このオブジェクトへのリファレンスが $a
に代入されます。この操作は、
$a++
の実行中に (すなわち、その前に$$a
が $$b
に一
致します)、 ++
が $OPERATOR{'++'
} か
$OPERATOR{'+='
} で表現されているときにだけ行なわれます。この演算
子が、+
を使って、
$a=$b; $a=$a+1;
のように表現されていれば、 $$a
も $$b
も、左辺値として現わ
れることはありません。
コピーコンストラクタが、いくつかのミューテーターの実行中に必要となって、
$OPERATOR{'='
} が見つからないときには、そのパッケージのオブジェク
トが単なるスカラであれば、文字列コピーとして自動生成されます。
Go to the first, previous, next, last section, table of contents.