frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

リファレンスの初歩テスト。

perlの非常に初歩的な部分を軽くテスト。

早い話、クラスのオブジェクトを

別のクラスのオブジェクトのメンバ変数に入れた時に

勿論リファレンスが渡されるんだよね?って確認。

実験したいこと

  1. main で 1つのクラスのオブジェクトAを作る
  2. main で 同じクラスで別のオブジェクトBを作る
  3. Aのメンバ変数に、オブジェクトBを入れる
  4. オブジェクトAの中のオブジェクトBの値を「テスト1」にする
  5. オブジェクトAの中のオブジェクトBの値を表示させる→「test1」と出てくる
  6. main で オブジェクトBの値を表示させる→「test1」出てくる
  7. main で オブジェクトBの値を「test2」にする
  8. オブジェクトAの中のオブジェクトBの値を表示させる→「test2」と出てくる
  9. main で オブジェクトBの値を表示させる→「test2」出てくる

って訳で、以下を実行。

#!/usr/bin/perl -w

use strict;

use Test;

my $parameterName = 'testString';

my $objTestA = new Test();

my $objTestB = new Test();

$objTestA->setParameter('objTestB', $objTestB);

$objTestA->getParameter('objTestB')->setParameter($parameterName, 'test1');

&showValueInRequest ($objTestA , $objTestB, $parameterName);

$objTestB->setParameter($parameterName, 'test2');

&showValueInRequest ($objTestA , $objTestB, $parameterName);

exit;

sub showValueInRequest {

my $objTestA = shift;

my $objTestB = shift;

my $targetName = shift;

print "objTestB is ${objRequest}\n";

print "objTestB in objTestA is ".$objTestA->getParameter('objTestB')."\n";

print $objTestB->getParameter($targetName)."\n";

print $objTestA->getParameter('objTestB')->getParameter($targetName)."\n";

}

結果。

あぁ、やっぱり main ん中で objTestB 操作しても objTestA ん中にも影響するよね。よし、納得。

objTestB is Test=HASH(0x814cc20)

objTestB in objTestA is Test=HASH(0x814cc20)

test1

test1

objTestB is Test=HASH(0x814cc20)

objTestB in objTestA is Test=HASH(0x814cc20)

test2

test2