0

どうして私はあなたがハッシュを宣言し、それから別のハッシュの中に入れるこのような例を見たことがないのですか?

my %hash1={};
$hash1{'key1'}='1-111';
$hash1{'key2'}='1-222';
$hash1{'key3'}='1-333';
my %hash2={};
$hash2{'key1'}='2-111';
$hash2{'key2'}='2-222';
$hash2{'key3'}='2-333';

my %main_hash1={%hash1, %hash2};

ハッシュの変数ではなく、ハッシュをハッシュ内に配置する次のような例を見ただけです。

my %main_hash2=( 'hash1' => {
                            'key1' => '1-111',
                            'key2' => '1-222',
                            'key3' => '1-333'
                    },
             'hash2' => {
                            'key1' => '2-111',
                            'key2' => '2-222',
                            'key3' => '2-333'
                    }
);

(配列にも似ています)

4

2 に答える 2

2

ハッシュをハッシュに格納することはできませんが、ハッシュ参照をハッシュに格納することはできます。

my %main_hash1 = ( hash1 => \%hash1, hash2 => \%hash2 );

同じことが配列にも当てはまります。

my @main_array1 = ( \@array1, \@array2 );

そしてミックスで:

my @array_of_hrefs = ( \%hash1, \%hash2 );
my %hash_of_arefs = ( arr1 => \@arr1, arr2 => \@arr2 );

これは常に行われます。なぜあなたがそれを見なかったのか分かりませんし、SOの誰もがその答えを知っているとは思えません。

また、これはハッシュを初期化しません:

my %hash1={}; ## should be my %hash1; or my %hash1 = ();
于 2012-05-30T20:25:19.523 に答える
0

次の例を参照してください。

Perlコード:

my %hash1;
$hash1{'key1'}='1-111';
$hash1{'key2'}='1-222';
$hash1{'key3'}='1-333';

my %hash2;
$hash2{'key1'}='2-111';
$hash2{'key2'}='2-222';
$hash2{'key3'}='2-333';

my %main_hash = ( hash1 => \%hash1, hash2 => \%hash2 );
use Data::Dumper;
print Dumper %main_hash;

出力 :

$VAR1 = 'hash2';
$VAR2 = {
          'key2' => '2-222',
          'key1' => '2-111',
          'key3' => '2-333'
        };
$VAR3 = 'hash1';
$VAR4 = {
          'key2' => '1-222',
          'key1' => '1-111',
          'key3' => '1-333'
        };

参照を使用します。http://perldoc.perl.org/perlreftut.htmlを参照してください必要に応じて:http: //perldoc.perl.org/perlref.html

物事を少し魔法にするrefトリックがあります:

my $hash_ref = {}; # reference to a blank hash

my %h = ( foo => "1", bar => "2" );

push @{$hash_ref->{'1st_level'}->{'level-2'}->{'level_3'}->{'arr'}}, 123;
push @{$hash_ref->{'1st_level'}->{'level-2'}->{'level_3'}->{'arr'}}, 456;
$hash_ref->{'1st_level'}->{'level-2'}->{'level_3'}->{'arr'}->[2] = \%h;
use Data::Dumper;
print Dumper $hash_ref;

出力 :

$VAR1 = {
          '1st_level' => {
                           'level-2' => {
                                          'level_3' => {
                                                         'arr' => [
                                                                    123,
                                                                    456,
                                                                    {
                                                                      'bar' => '2',
                                                                      'foo' => '1'
                                                                    }
                                                                  ]
                                                       }
                                        }
                         }
        };
于 2012-05-30T20:25:32.357 に答える