0

配列の配列を含むハッシュを作成しました。これを %hash_multidim と呼びましょう。Data::Dumper からの出力は次のようになります。

      'Key1' => [
                   [
                     '-3.81',
                     '-1.91',
                     '-1.86',
                     '-1.70'
                   ],
                   [
                     '1.35',
                     '1.04',
                     '-1.01',
                     '-2.69'
                   ]
                 ],
      'Key2' => [
                    [
                      '-1.63'
                    ],
                    [
                      '-1.17'
                    ]
                  ],

ここで、この構造の最下位レベルにアクセスして操作を実行したいと思います。たとえば、「Key1」の場合、行 1 の平均 (別名 [0] の配列の平均) を見つけたいと考えています。List::Util qw(sum) を使用して、mean というサブルーチンを作成しました。

sub mean {
    return sum(@_)/scalar(@_);
}

ただし、サブルーチンを使用する場合、たとえば:

my $test = mean($hash_multidim{Key1}[0]);
print $test;

期待どおりの結果が得られません。実際、私は得る:

43678288

どこで私は間違えましたか?の結果を評価しようとすると

$hash_multidim{Key1}[0]

すべてがコーシャに見えます。例えば、

@test2 = $hash_multidim{Key1}[0];
print Dumper(\@test2);

次の出力が生成されます。

$VAR1 = [
          [
            '-3.81',
            '-1.91',
            '-1.86',
            '-1.70'
          ]
        ];
4

2 に答える 2

4

$hash_multidim{Key1}[0]は配列参照ですがmean、リストが必要です。したがって、「逆参照」するだけです。構文は少しトリッキーですが、

my $test = mean( @{$hash_multidim{Key1}[0]} );
于 2013-08-19T20:44:10.463 に答える