WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:perlで、mainとパッケージで変数を共通する方法

0:[投稿] abc [2003/12/10 10:52 ][環境:IE6,NN7 linux perl]

perlで変数をパッケージからでも取得できるようにする方法はありますでしょうか?
ユーザー名などを、$userなどに入れてパッケージからでも同じ$userでアクセス
しようとしているのですがいい方法がわかりません。

現在は、
#/usr/bin/perl
use My;
$user = "太郎";
$My::user = $user;

として、Myのパッケージ内でも$userとして使えるようにしているのですが、変数名が
多くなってきた場合に大変ですし、mainで$userが変更された場合に$My::userに反映
されません。

どのようにしたら良いでしょうか?


1:[回答] ふじ [URL] [2003/12/10 14:31 ]

#!/usr/bin/perl                                                                          
                                                                                         
use strict;                                                                              
use My;                                                                                  
my $config = {                                                                            
   user => 'taro',                                                                      
};                                                                                        
$My::config = $config;
                                                                   
My->print_user();                                                                        
$config->{user} = 'jiro';                                                                
My->print_user();

----------------------------------------
package My;                                                                              
use strict;                                                                              
use vars q|$config|;                                                                      
sub print_user                                                                            {                                                                                        
   print "user=", $config->{user}, "\n";
}
                                                                                         
1;
---------------------------------------

たとえば $config をリファレンスとして作成して渡してやれば、
どこで変更されても反映されます。(実体は一つなので)


2:[完了] abc [2003/12/10 15:29 ]

有り難うございます。
そうですね。mainでもpackage内でもリファレンスを使えば
いいんですね。

最初、リファレンスを考えたんですが、
(main)
$user = "太郎";
$My::user = \$user;

としており、mainでは$user、packageでは$$userとなるため
これはバグ発生の元だなと困ってました。

そうですね。両方でリファレンス使えば統一できますね。ハッシュも使いたいと思います。
有り難うございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World