サーカムフィックス(circumfix)逆参照を使わない
サーカムフィックス(circumfix)逆参照とは、コレ=>${$list_ref}[0]
代わりに矢印をつかって、$list_ref->[0] とすること。矢印のほうがすっきり書けるし、2重引用符で文字列に展開できるという利点がある。また、逆参照のほうは、中括弧や、プレフィックス$を忘れてもコンパイルエラーにならないというデメリットがある。
スライスをする場合は、逆参照を使う他ない。
#下記のコードは同じ意味になる。
#$list_refが$で始まるので、[]はスカラーコンテキストで評価される。
my ($from, $to) = $list_ref->[0, -1];
my ($from, $to) = ($list_ref->[-1], undef);
逆参照しか選択の余地がないときは{}で囲む
$$$stack_ref[0]とかはダメ。
シンボリック参照を決して使用しない
シンボルを使うと、型グロブを通じて、現在の名前空間のパッケージ変数を参照する。
パッケージ変数を使用する必要はほぼないはずで、大体レキシカルハッシュで代用できる。
双方向参照のデータ構造では、weakenを使用する
双方向参照では、片方がスコープを外れたりして、削除されても、もう片方から参照されているのでガベージコレクションの対象にならず、メモリが開放されない。
そこで、weakenを使用すると、参照カウントが1減るが、参照自体は残すことができる。片方がスコープから外れると、参照カウンタは0になるので、両方の参照ともに正しく消滅する。
0 件のコメント:
コメントを投稿