ハッシュリファレンス

my $myHushRef ;
$myHushRef = {
	 foo	=> 'FOO'
	,bar	=> 'BAR'
	} ;
print "$myHushRef->{foo}\n" ;
print "$myHushRef->{bar}\n" ;

これがハッシュリファレンスを使ったコード。

my %myHush ;
%myHush	= (
	 hoge	=> 'HOGE'
	,fuga	=> 'FUGA'
	) ;
print "$myHush{hoge}\n" ;
print "$myHush{fuga}\n" ;

これがハッシュを使ったコード。

まだハッシュも満足に使えない状態で、いきなりモジュールを使い出したので、本来のハッシュの記法を覚えずに、ハッシュリファレンスを使っていた。まあ、リファレンスの方がなにかと使い勝手がいいし、いいんだけどね。

なんかハッシュをWebで検索して見ていて微妙に違和感のあるコードだと思ったら、そっちが本来の記法だったという話でした。
オチ無し。

・・・実はインスタンス変数に2つのオブジェクトを対にして、配列に格納するコードを書いていてなんだかワケが分からなくなったので整理していたので、ついでにメモ。書いていたのはこんなコード。

sub New {
    my $class		= shift ;
    my @myStockArray	= @_ ;
	my $self ;

	$self->{Trades}			=  ;	#個々の銘柄のトレード(仕掛・手仕舞い)を管理するオブジェクトと時系列データオブジェクトの配列
	$self->{TradesToBeClose}	=  ;	#手仕舞いをもって終了とするトレード管理オブジェクトと時系列データオブジェクトの配列

	foreach my $myCode (@myStockArray) {
		my $myDateSerial = DateSerialService->New($myCode) ;
		my $myHushRef = {
			 DateSerial 	=> $myDateSerial
			,Trade		=> Trade->New($myDateSerial)
		} ;
		push(@{$self->{Trades}},$myHushRef) ;
	}
	
    # bless したオブジェクトリファレンスを返す
    bless $self, $class;
    return $self ;
}

使う時はこんな感じ(のはず)。

	foreach my $myTradeRef (@{$self->{Trades}}) {
		$myTradeRef->{DateSerial}->ForwardTo($TODAY) ;
		$myTradeRef->{Trade}->ProcessToday($myTradeRef->{DateSerial}) ;
	}

・・・なんか、ハッシュにオブジェクトへのリファレンス入れて、そのハッシュへのリファレンスを配列に詰め込んで、その配列へのリファレンスをハッシュに入れて・・・ みたいな事を延々とする作業は、結構堪えるな;;