1

私はスクリプトに取り組んでおり、ハッシュに格納されている配列からいくつかの値を取得しようとしています。Googleで検索した後、SOで質​​問を検索し(タイトルが似ているものの、未解決のままであるか、私の問題とは少し異なる問題を解決しているものもあります)、データ構造クックブックをチェックして、妥当な方法ですべてを試した後、あなたの助けを求めるようになりました。

ハッシュ$actionと配列があり$action->{'Events'}ます。の出力は次のprint Dumper($action->{'Events'});とおりです。

$VAR1 = [{
    'Muted'        => 'something',
    'Role'         => 'something',
    'Event'        => 'something',
    'Channel'      => 'something',
    'Talking'      => 'something',
    'UserNumber'   => 'somenumber',
    'CallerIDName' => 'somenumber',
    'Conference'   => 'somenumber',
    'MarkedUser'   => 'something',
    'ActionID'     => 'somenumber',
    'CallerIDNum'  => 'somenumber',
    'Admin'        => 'something'
}];

たとえば、の値を取得する必要がありますが$action->{'EVENTS'}->{'CallerIDName'}、この構文や他の多くの構文は機能しません。私も試したことが$action->{'EVENTS'}[6]あり$action->{'EVENTS'}->[6]ます。

4

3 に答える 3

4

これはハッシュの配列です。次の方法を試してください。

$action->{'EVENTS'}[0]->{'CallerIDName'}

詳細はperldscを参照してください。


次のような更新された例:

use strict;
use warnings;
use Data::Dumper;
my $action = {};
$action->{'Events'} = [{'Muted' => 'something',
            'Role' => 'something',
            'Event' => 'something',
            'Channel' => 'something',
            'Talking' => 'something',
            'UserNumber' => 'somenumber',
            'CallerIDName' => 'somenumber',
            'Conference' => 'somenumber',
            'MarkedUser' => 'something',
            'ActionID' => 'somenumber',
            'CallerIDNum' => 'somenumber',
            'Admin' => 'something'}];
#push hash into the array of hashes
push(@{$action->{'Events'}},{'Muted' => 'something',
              'Role' => 'something1',
              'Event' => 'something1',
              'Channel' => 'something1',
              'Talking' => 'something1',
              'UserNumber' => 'somenumber1',
              'CallerIDName' => 'somenumber1',
              'Conference' => 'somenumber1',
              'MarkedUser' => 'something1',
              'ActionID' => 'somenumber1',
              'CallerIDNum' => 'somenumber1',
              'Admin' => 'something1'} );
 for(my $i=0; $i < @{$action->{'Events'}}; $i++){
    print Dumper($action->{Events}[$i]); #print entire hash in array index $i
    #print callerIDName key(any key) of each hash
    print Dumper($action->{'Events'}[$i]->{'CallerIDName'});  
 }
于 2011-03-28T09:14:21.183 に答える
2

見逃しているのは、 $action に配列への参照が含まれているため、次の部分で配列を逆参照する必要があることです。その中にハッシュがあり、ハッシュを逆参照する必要があります。したがって、次のようになります。

$action->{'EVENTS'}[0]{'CallerIDname'}

(最初の後の -> はオプションなので、これも問題ないことに注意してください:

$action->{'EVENTS'}->[0]->{'CallerIDname'}

そして、まったく同じことをします)

于 2011-03-28T09:15:33.793 に答える
1

外側の [ ] は、ハッシュが配列内にあることを示します。だから試してみてください:

  $action->{Events}->[0]->{CallerIDName}

{Events} と [0] の間の -> は省略できますが、わかりやすくするために省略します。ここでは違いはありませんが、他の場所では違います。比較:

  @array = (1,2,3); 
  $arrayref = \@array; 
  print $arrayref[0];    # accesses non-existent array @arrayref

  print $arrayref->[0];  # '1'
于 2011-03-28T09:21:51.213 に答える