次のコードの 9 行目は、ハッシュのローカル コピーを作成します。%d を変更しても、グローバル %h 変数 (行: 5) は変更されません。%h に変更を加えるには、参照 (行: 8) を使用する必要があります。
ローカルコピーを作成せずにサブでハッシュを逆参照する方法はありますか? 多くの参照を含む複雑なレコードがあり、逆参照を使用してナビゲートする方がはるかに簡単であるため、質問しています。
1 #!/usr/bin/perl -w
2 use strict;
3 use warnings;
4
5 my %h;
6 sub a {
7
8 my $href = shift;
9 my(%d) = %{$href}; # this will make a copy of global %h
10
11 $$href{1}=2; # this will make a change in global %h
12 $d{2}=2; # this will not a change in global %h
13 }
14 a(\%h);
15 print scalar (keys %h) . "\n";
----------------
返信ありがとうございます。
問題は、サブで %h にある種の「エイリアス/バインド」を作成できるかどうかです。%d を含むサブで %h のコンテキストを変更したいと考えています。私が %d を作成するたびに、彼は %h のローカル コピーを作成します - それを回避する方法はありますか、それとも常に参照を使用する必要がありますか?
----------------
もう一度 :) $href の仕組みを知っています。チュートリアル/マニュアル/ドキュメントなどを読みました。そこに答えが見つかりませんでした-そこに書かれていないので、これは不可能だと思いますが、誰が知っていますか。
私はそのような行動を達成したい:
6 sub a {
7 $h{"1"}=2;
8 }
それと同等です:
6 sub a {
8 my $href = shift;
11 $$href{1}=2; # this will make a change in global %h
11 $href->{1}=2; # this will make a change in global %h
%d の助けを借りてそれを行う方法 - 実際に可能ですか?
6 sub a {
7 my %d = XXXXXXXXX
.. }
ローカル コピーを作成せずに %h を指すには、XXXXXXXXX の下に何を入力すればよいですか?