• ベストアンサー

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' };

質問者が選んだベストアンサー

  • ベストアンサー
  • Ceren
  • ベストアンサー率49% (90/183)
回答No.1

> $arrayref = (); #←クリアしているが、Dumperするとクリアされていない $arrayrefは「配列の参照」なのですから、それをクリアするのであれば @$arrayref=(); ではないですか?

その他の回答 (2)

  • vsba23895
  • ベストアンサー率58% (18/31)
回答No.3

>$arrayref = (); undef(@$arrayref); ----------------- $arrayref は、test() 内に渡って来た参照値に過ぎず、 その値を変更しても、呼び出し元の @$arrayref (つまり @A)の 内容は不変です。

  • g_p_
  • ベストアンサー率53% (28/52)
回答No.2

こんにちは、 >$arrayref = (); リファレンスを格納した $arrayrefに空のリストを代入している事になってます。 @{$arrayref} = (); こうしたらどうでしょう? 配列全体を指すリファレンスをデリファレンスするには、 そう書くしかないかもです。

関連するQ&A