- ベストアンサー
作業域が消える(ように見える)
- 作業域が消えてしまう理由について教えてください。
- rtnaで作成した作業域がrtnbで参照できない理由は何でしょうか。
- 作業域のトレース方法について教えていただけますか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> $wk1は明示的に確保などしておらず、直接rtnaで作成しています。 この 1行の意味が致命的に重大です。 可能性1 ============================================ rtna 内で my $wk1 とか local $wk1 とか書いていれば、 rtnbからは見えません。 可能性2 ============================================ そうで無ければ、 両 rtn は、同じソースの同じ package 内ですか? 可能性3 ============================================ rtnb から$wk1が見えるはず状況であっても、rtnb内で my や local で $wk1 を定義すれば、やはり見えなくなります。 可能性4 ============================================ $wk1 がリファレンスの場合や $wk1 を参照するリファレンスがあると、あなた自身が意図せずに内容を書き換えるケースもあります。 上記いずれもハズれの場合や理解できない場合は、同じ問題が発生するできるだけ短い完全なコードを手間をかけて作って貼り付けてください。 # 完全とは、それだけで実行できる『Perlのソースとして完結したもの』です。 # できるだけ短いとは、せいぜい2~30行で。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
悪いけど, 「これでわかってくれ」という方が無理. $wk1 がどこでどのように参照されているかわからないので, 答えようがありません. 少なくとも $wk1 が出てくる行はすべて出すくらいのつもりで書いてください. 特に「$wk1は明示的に確保などしておらず、直接rtnaで作成しています。」と書いてあってもどのように「作成している」のかはあなた以外のだれにも理解できません. 「どのように作成しているのか」は確実に書いてください. もちろんいくつか推測はできて, 例えば ・実は rtnb→rtna の順に実行されていた ・rtna と rtnb でパッケージが違う ・rtna で my を使って $wk1 を使っていた とか考えられるけど, こうやって他人に推測させるような質問は大体良くないと思ってください.
お礼
細かく有り難うございました。 まさに可能性1のlocalを使っていました。 $wk8 = $wk1と移してやったら問題なく参照できました。 これまでにもlocalを使っていましたが、 今回のような経験は初めてです。 これまではlocalで作った作業域を外のsubで使うということが無かった ということだったのですね。 お世話になりました。