- ベストアンサー
Perlで参照のクリアの方法
Perlで参照のクリアで困っているのですが、以下のソースで正しくクリア方法はありますか? use strict; use warnings; use Data::Dumper; sub test { my ($arrayref) = @_; $$arrayref[2]{'A'} = 'aaaaa'; #$$arrayref = (); # Not a SCALAR reference at test_0042.pl line 10. $arrayref = (); #←クリアしているが、Dumperするとクリアされていない } my @A = (); print Dumper(@A); print "\n"; test(\@A); print Dumper(@A); print "\n"; exit; __END__ $VAR1 = undef; $VAR2 = undef; $VAR3 = { 'A' => 'aaaaa' };
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> $arrayref = (); #←クリアしているが、Dumperするとクリアされていない $arrayrefは「配列の参照」なのですから、それをクリアするのであれば @$arrayref=(); ではないですか?
その他の回答 (2)
- vsba23895
- ベストアンサー率58% (18/31)
>$arrayref = (); undef(@$arrayref); ----------------- $arrayref は、test() 内に渡って来た参照値に過ぎず、 その値を変更しても、呼び出し元の @$arrayref (つまり @A)の 内容は不変です。
- g_p_
- ベストアンサー率53% (28/52)
こんにちは、 >$arrayref = (); リファレンスを格納した $arrayrefに空のリストを代入している事になってます。 @{$arrayref} = (); こうしたらどうでしょう? 配列全体を指すリファレンスをデリファレンスするには、 そう書くしかないかもです。