关于perl程序的一些问题

use*_*099 3 perl

关于以下代码段,我想知道我对几个问题的理解是否正确?

1)在结构中$model->{in1}->{tra1}->{data}},"in1","tra1"和"data"都表示不同级别的散列结构中的特定键.

2)$#{$model->{in1}->{tra1}->{data}}代表一个数组吗?

3)我的 @cus = sort keys %cus;目标是什么?右边的"cus"和左侧的"cus"是一样的吗?

my %cus = ();
for my $i ( 0 .. $#{$model->{in1}->{tra1}->{data}})
{
  foreach  my $cu (keys %{$model->{in1}->{tra1}->{data}->[$i]->{concept}}
   {
       $cus{$cu} = 1;
   }
 }
my  @cus = sort keys %cus;
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 5

1)

它们是不同哈希的关键,是的.

  • in1用作引用的哈希的键$model.
  • tra1用作引用的哈希的键$model->{in1}.
  • data用作引用的哈希的键$model->{in1}->{tra1}.

2)

  • $#a返回数组的最后一个索引@a.

所以

  • $#{ $ref }(或$#$ref简称)返回引用的数组的最后一个索引@{ $ref }(或@$ref简称)$ref.

所以

  • $#{ $model->{in1}->{tra1}->{data} }返回@{ $model->{in1}->{tra1}->{data} }引用的数组的最后一个索引$model->{in1}->{tra1}->{data}.

3)

该语句对哈希的键进行排序%cus并将它们放在数组中@cus.不,%cus并且@cus不是相同的变量.

"4")

代码可以简化为:

my %cus;
my $data = $model->{in1}->{tra1}->{data};
for my $i (0 .. $#$data) {
   for my $cu (keys %{ $data->[$i]->{concept} }) {
      ++$cus{$cu};
   }
}

my @cus = sort keys %cus;
Run Code Online (Sandbox Code Playgroud)

甚至:

my %cus;
for my $data_item (@{ $model->{in1}->{tra1}->{data} }) {
   for my $cu (keys %{ $data_item->{concept} }) {
      ++$cus{$cu};
   }
}

my @cus = sort keys %cus;
Run Code Online (Sandbox Code Playgroud)