Perlのクラスとそのインスタンスについて疑問があります。
newでインスタンスを生成して、それを代入した場合には
オブジェクトはコピーされるのでしょうか?
$a = new MyClass;
$b = $a; # aをコピーしてbを作る?
この状態の時にaとbが同じインスタンスを指しているのか、
コピーされた別のインスタンスを指しているのかわかりません。
コピーされるとして、逆にコピーしない方法はありますか?
PHPでいうと以下の書式のことがしたいのです。
$b =& $a;
リファレンスを使えばできそうですが、なんだか2回コピーしている
ような気がします。
$ref_b = \$a;
$b = $$reb_b;
PHPでいう is_a のような関数が見つけられなかったので、
どうやって上記のことを確認すればよいのかわかりません。
Perlの代入はすべてコピーと考えてよいでしょうか?
アドバイスなどいただけると幸いです。
No.2ベストアンサー
- 回答日時:
new して返ってくるのはインスタンスのリファレンスなので、Cで言うところのポインタの持ち回りと一緒です。
やっつけで↓のようなスクリプトを書いてみました。
package Foo;
sub new {
my $self;
$self = {};
$self->{value} = shift;
bless $self;
return $self;
}
package main;
my $foo = Foo::new("hello, world");
print $foo, "\n";
my $bar = $foo;
print $bar, "\n";
my $baz = Foo::new("Howdy!");
print $baz, "\n";
$baz = $foo;
print $baz, $baz->{value}, "\n";
$baz->{value} = "hogehoge";
print $foo->{value}, "\n";
実行例です。
Foo=HASH(0x1635db8)
Foo=HASH(0x1635db8)
Foo=HASH(0x1635fc8)
Foo=HASH(0x1635db8)hello, world
hogehoge
見ての通り、リファレンスを代入しても中身がコピーされることはありません。
逆に別の変数を経由して中身を書き換えると、元のものにも影響します。
No.4
- 回答日時:
オブジェクトはコピーされません。
オブジェクトのコピーは、Storableモジュールが便利です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlのプログラミングについて
-
はじめての動画像処理
-
pythonにCでのexternはありますか
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
char str[256]の256の意味は?
-
ListView重複データ削除
-
VB.NET LeftBの代用
-
ビットデータのチェック方法
-
10Mバイトて文字数に すると何...
-
int型(2バイト)データの分割
-
PHPのCookieが有るか無いかで、...
-
Excel 1セル当りの文字数が2...
-
3バイト文字(UTF-8)をprintfで...
-
URLは最高何文字まで可能なので...
-
ポインター引数の関数でコンパ...
-
CGIを勉強しています。¥n(改...
-
VB6でのファイルサイズ取得につ...
-
Javaで日本語1文字のバイト数
-
COBOLのCOMP形式について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonにCでのexternはありますか
-
VB2010での連立方程式の計算
-
格子運動の連立同次方程式
-
Perlで変数中のエスケープされ...
-
なぜかわかりませんscanf()の戻...
-
vbsでホームページ表示について
-
最大値の出し方
-
UWSCにおける変数の扱い方
-
@color1 = ('0000ae',・・・,'$...
-
perlのリファレンス
-
【Perl】特定文字列の抽出方法...
-
$template->output();の時に ...
-
CSVから構造体へ代入
-
変数内の文字の数
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
DataGridViewの特定列に入力さ...
-
stable diffusionのエラー
おすすめ情報