![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
packageを継承した場合、
継承先(以下のMyPkg)で継承もと(MyBase)のローカル変数($localValue)を直接書き換える方法はありませんか?
package MyBase;
my $localValue;
sub doBase{
my $self=shift;
$localValue ={ 'hanako'=>{'id'=>1, 'pref'=>'tokyo'} };
}
sub getPref {
my $self=shift;
my $name=shift;
$localValue->{$name}{'pref'};
}
package MyPkg;
use base qw(MyBase);
sub new{
my $class=shift;
my $self={};
bless $self, $class;
return $self;
}
sub doAnything {
# この中でMyBaseの$localValueを直接書き換えたい
$localValue ={ 'taro'=>{'id'=>2, 'pref'=>'osaka'} };
}
------main::
my $pkg=new MyPkg;
$pkg->doSomething;
print $pkg->getPref('hanako');
$pkg->doAnything;
print $pkg->getPref('taro');
----------
以下のような感じでmyBaseの中に$localValueを返すサブルーチンを作っておけば、
print $pkg->localValue->{'hanako'}{'pref'};
などと取得は出来ますが、
$pkg->localValue->{'hanako'}{'pref'}='kyoto';
のような代入は無理みたいでした。
package MyBase;
my $localValue;
sub localValue{
my $self=shift;
$localValue;
}
doBaseのようなサブルーチン経由で書き換えていますが、
use baseしていても、やはりそうしないとダメでしょうか。
Windows、ActivePerl、perl 5.10.0
Linux、Perl5.8
No.1ベストアンサー
- 回答日時:
my $localValueの所をour $localValueとし、doAnything内で$MyBase::localValueのようすればその変数に直接アクセスできます。
ourはパッケージ変数を宣言するものです。
パッケージ変数については参考URLをどうぞ。
http://www.google.co.jp/search?hl=ja&q=perl+%83p …[%83W%95%CF%90%94&lr=lang_ja
http://d.hatena.ne.jp/perlcodesample/20080308/12 …
この回答への補足
うまくourが機能してないというか、
package間で共有できていないようですが、あいかわらずよくわかっていません。。。
とりあえず閉めさせていただきます。
ありがとうございます。
sub doBaseじゃなくて、sub doSomethingの書き間違いです。
BBS投稿時に書き換え漏れたようで。。。m(_ _)m
やっぱりourですか、、、、
http://perldoc.perl.org/functions/our.html
ここのサンプルを読んでourにしてみたのですが、
print $pkg->getPref('hanako'); これで何も出力されずでした。
このページのサンプル
> package Foo;
> our $bar;
> $bar = 20;
>
> package Bar;
> print $bar;
をそのまま試しても何も出力されずで、よくわからない状態です。
ourを使うという方向で、試してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
例外処理のフローチャートの記...
-
”:”がいっぱいの文について。
-
サブルーチンを認識しません。
-
Excel VBAで、ユーザーフォー...
-
VBSがコンパイルエラーになりま...
-
PerlモジュールをWindowsアプリ...
-
acwzlibとは?
-
'Range'メソッドは失敗しました
-
SendKeysの使い方について
-
Excel VBAでリンク切れをチェッ...
-
「デバイスは PRN を初期化でき...
-
VBでグローバル変数を宣言するには
-
VBAProjectのモジュ...
-
ユーザー定義関数に#NAME?が返...
-
LCD ディスプレイを Raspberry ...
-
VBAで「メモリが不足しています」
-
現在アクティブなフォーム名を...
-
英字のみを検索する正規表現に...
-
印刷後メッセージボックスを表...
-
教えて下さい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
例外処理のフローチャートの記...
-
Excel VBAで、ユーザーフォー...
-
モジュールとサブルーチン
-
GOSUB命令とは
-
オフコン(富士通Kシリーズ)...
-
”:”がいっぱいの文について。
-
fortran95実行エラー
-
サブルーチンを認識しません。
-
ACCESSのVBAでPrivate Sub ~en...
-
COBOLで、Shellを起動するには?
-
ExcelVBA AddinでOnAction
-
初心者です。Perlではどんな時...
-
cobol サブルーチンのlink
-
初歩的な質問なのですが、サブ...
-
配列と互換性のない型の要素に...
-
プログラミング Fortran
-
サブルーチンやif分以外での中括弧
-
Attempt to free unreferenced ...
-
サブルーチンの中にサブルーチ...
-
プログラムの可読性が悪いです...
おすすめ情報