異なるハッシュ キーで同じ値にアクセスすることは可能ですか? 「非常に長いテキスト」をコピーしないように Perl に指示するにはどうすればよいですか?
$hash->{'key'} = 'very long text';
$hash->{'alias'} = $hash->{'key'};
異なるハッシュ キーで同じ値にアクセスすることは可能ですか? 「非常に長いテキスト」をコピーしないように Perl に指示するにはどうすればよいですか?
$hash->{'key'} = 'very long text';
$hash->{'alias'} = $hash->{'key'};
簡単な方法は、共通変数への参照を使用することです。
my $hash;
my $val = 'very long text';
$hash->{key} = \$val;
$hash->{alias} = $hash->{key};
say ${ $hash->{key} }; # very long text
say ${ $hash->{alias} }; # very long text
${ $hash->{key} } = 'some other very long text';
say ${ $hash->{key} }; # some other very long text
say ${ $hash->{alias} }; # some other very long text
say $hash->{key} == $hash->{alias} ? 1 : 0; # 1
複雑な方法は、Data::Aliasを使用することです。
use Data::Alias qw( alias );
my $hash;
$hash->{key} = 'very long text';
alias $hash->{alias} = $hash->{key};
say $hash->{key}; # very long text
say $hash->{alias}; # very long text
$hash->{key} = 'some other very long text';
say $hash->{key}; # some other very long text
say $hash->{alias}; # some other very long text
say \$hash->{key} == \$hash->{alias} ? 1 : 0; # 1
Tie :: AliasHashは機能しますが、このルートを使用することはお勧めしません。ハッシュキーをエイリアスする必要があると感じることを何をしようとしていますか?おそらくもっと良いルートがあります。
スカラーの代わりに配列参照を使用します。
use Data::Dumper ;
my $Var = [10];
my %Hash = ('k' => $Var, 'a' => $Var);
print Dumper \%Hash;
$Hash{'a'}[0] = 'test' ;
print Dumper \%Hash;
いいえ。次の回避策が可能です。
メガバイト単位のデータについて話しているのでない限り、またはこれを数千回行っていない限り、データをコピーするだけではそれほど害はありません。
my %hash = (key => 'very long text');
my $reference = \($hash{key});
print "The very long text is ", $$reference, "\n";
また
$hash{alias} = \($hash{key});
print "The very long text is ", $$hash{alias}, "\n";
欠点:異なる構文を使用する必要があります。
my $key = "key";
my $alias = $key;
my %hash = ($key => 'very long text');
print "The very long text is ", $hash{$alias}, "\n";
欠点:余分な変数。
参照を使用できます:
$hash->{'key'} = 'very long text';
$hash->{'alias'} = \$hash->{'key'};
print ${$hash->{alias}}, "\n" if ref $hash->{alias};