電子書籍の厳選無料作品が豊富!

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

A 回答 (3件)

> $arrayref = (); #←クリアしているが、Dumperするとクリアされていない



$arrayrefは「配列の参照」なのですから、それをクリアするのであれば
@$arrayref=();
ではないですか?
    • good
    • 0

>$arrayref = ();



undef(@$arrayref);

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

こんにちは、


>$arrayref = ();
リファレンスを格納した $arrayrefに空のリストを代入している事になってます。

@{$arrayref} = ();
こうしたらどうでしょう?
配列全体を指すリファレンスをデリファレンスするには、
そう書くしかないかもです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!