2007年6月13日水曜日

Perlばぐ?

今日、仕事でPerlスクリプトを書いていたらバグ臭い現象に悩まされた。
ハッシュに格納した値を取り出す処理で、

まずAというオブジェクトがもつハッシュの値を取り出して何かの処理に使う。→正常に処理
次にBというオブジェクトがもつハッシュの値を取り出して何かの処理に使う。→何もでてこない???

直前に
print keys(*), values(*)
でBのハッシュのキーとバリュー値を表示させると確かに入っている。
だが、おかしなことに、上記のprint処理を書いただけでBのハッシュ値が正常にでてきて、処理が正常に完了した。

・・・もしかしてハッシュが不安定?で正常に処理できなかったが、
keys,values関数を呼び出すことによって安定化されて正常に処理できた??

時間に追われていたので応急処置として、処理の直前に意味もなく
keys(*)
values(*)
を書いたが・・・なんかかっこ悪い・・・

うーん謎だ・・・
なんちゃってオブジェクト指向で書いてるのが原因か?
リファレンスが変なところに逝っちゃってる?
それともローカル変数とかそういう問題?

言語自体のバグとか・・・

(開発全く関係なしな内容w)

2 件のコメント:

koshimoto, hiroo さんのコメント...

perlは詳しくないけれど、そんなバグが残ってるとはとても思えない。
例えば変数にmyが付いてるかどうかで挙動が全然変わる言語なので、そのハッシュがどういう宣言で、何を入れてるのかが問題だと思う。

aiou さんのコメント...

myは付いてるけれど、ハッシュのハッシュのハッシュという複雑なつながりになってるせいかもしれない。
そして書き方も悪いんだろう。
Perlは曖昧なところが便利でいいけれど、逆にこういう事態もまねくんだなー