配列要素へのリファレンスと、要素の追加・削除について
ActivePerl v5.8.8 build 820 を使用しています。
配列要素へのリファレンスを取得し、その後要素の追加又は削除を行った場合
元の要素を参照し続けます。
(1) 要素の追加
@list = qw/a b c d/;
$p = \$list[1];
print("$$p\n");
splice(@list, 1, 0, 'x');
print("$$p\n");
# 'b' が表示される
# $list[2] を参照 ($list[1] ではない)
(2) 要素の削除
@list = qw/a b c d/;
$p = \$list[1];
print("$$p\n");
splice(@list, 1, 1);
print("$$p\n");
# 'b' が表示される
質問1
これは perl の仕様としての動作でしょうか? それとも、実行系やバージョン
などの環境に依存するものでしょうか?
質問2
要素の削除の場合、削除直後なのでたまたま元の値が表示されただけで、
削除した要素 'b' が格納されたメモリ空間はいつ上書きされるかわからない
状態なのでしょうか? それとも、上書きされることはないのでしょうか?
お礼
情報ありがとうございました。 クラス javax.swing.text.AbstractDocument から継承されたメソッドの中に getLength, remove, replace, がありました。見逃してた・・。 動いたコートはこんな感じになりました。後で見る人のために示しておきますね。 int len = (int)Math.floor(myDoc.jEdtLogHtml.getDocument().getLength() * 0.3); myDoc.jEdtLogHtml.getDocument().remove(1, len);