- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:モジュールのコンストラクタとスコープ)
モジュールのコンストラクタとスコープ
このQ&Aのポイント
- perlのモジュールを使用する際のコンストラクタで
- コンストラクタ内でリファレンスをインスタンスに与えた場合、同package内でデリファレンスできる
- スコープは参照できるが値を保証しない
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
これは、q=817716 と同じ話ですよね? # 質問一覧の順に見てたので、質問順と回答順が逆になってしまいました^^; 答えから言えば、1です。 my によってメモリを確保し、リファレンスを保持しておくことでそのメモリを使いまわす、というのはよく使われる手法です。(仕組みについては q=817716 をご参照ください。) 「Perl クロージャ」あたりで検索してみると、何か情報が得られるかもしれません。 また、無名配列や無名ハッシュによって、my 変数を介さずにメモリを確保することもできます。(配列やハッシュだけですが。) 無名配列は [ ]、無名ハッシュは { } で生成します。 各カッコの中には初期値を入れることもでき、それぞれリファレンスを返すので、質問の @arr1 は使用せずに my $self = { member => "hoge", arr => [ 1,2,3,4,5,6 ] } と書くこともできます。(全く同じ結果となります。)
お礼
q=817716 と同様にお返事いただきありがとうございます。二回も同じような質問をしてしまい、恥ずかしい限りです。 しかしperlは奥深いですね。 Cであれば許されないリファレンス(ポインタ)でも、perlは「都合よく」解釈してくれるんですね。 スコープに関する説明文書は多く見られるのですが、寿命に関しては見かけなくて困っていました。 ありがとうございます。