0

特定のキーに対して、(メソッドによって返された) ハッシュを別のハッシュに割り当てたいと考えています。

たとえば、メソッドは次の形式のハッシュを返します。

hash1->{'a'} = 'a1';
hash1->{'b'} = 'b1';

ここで、これらのハッシュ値を呼び出しメソッド内の別のハッシュに割り当てて、次のようなものを取得したいと考えています。

hash2->{'1'}->{'a'} = 'a1';
hash2->{'1'}->{'b'} = 'b1';

perl は初めてなので、これを行う最善の方法がわかりません。しかし、些細なことに聞こえます...

4

2 に答える 2

3

あなたのサブは次のようになります:

#!/usr/bin/env perl
use strict;
use warnings;

sub mystery
{
    my($hashref) = { a => 'a1', b => 'b1' };
    return $hashref;
}

my $hashref1 = mystery;
print "$hashref1->{a} and $hashref1->{b}\n";
my $hashref2 = { 1 => $hashref1 };
print "$hashref2->{1}->{a} and $hashref2->{1}->{b}\n";

重要なポイントの 1 つは、矢印演算子を使用して変数にアクセスするための表記法は->、プレーン ハッシュではなく、ハッシュ参照を扱っていることです。

于 2012-07-14T10:50:35.130 に答える
1

1 番目と 2 番目のハッシュがあります。

my %hash1 = (
  a => 'a1',
  b => 'b1');
my %hash2 = (1 => undef);

ハッシュにはスカラー値のみを割り当てることができますが、これには参照が含まれます。参照を取得するには、バックスラッシュ演算子を使用します。

$hash2{1} = \%hash1;

例のように、値を逆参照できるようになりました。

print $hash2{1}->{a}; # prints "a1"

適切なシジル ($@%) を使用するように注意してください。期待するデータ型のシジルを使用してください。必ずしも宣言した型とは限りません。

「perldoc perlreftut」は面白いかもしれません。

于 2012-07-14T10:42:28.203 に答える