关于perl程序的一些问题

时间:2012-02-13 03:08:48

标签: 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;

3 个答案:

答案 0 :(得分:5)

1)

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

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

2)

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

所以

  • $#{ $ref }(或简称为$#$ref)返回@{ $ref }(或简称为@$ref)的最后一个索引,即$ref引用的数组。 / LI>

所以

  • $#{ $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;

甚至:

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

my @cus = sort keys %cus;

答案 1 :(得分:0)

  1. 是的,你已经有三个嵌套的哈希。

  2. 是的,$#{...}部分表示"封闭数组的最大索引"。您还知道...->{data}是一个(引用)数组,因为下一行有->{data}->[$i]

  3. @cus%cus是两个不同的变量,无关。

答案 2 :(得分:0)

  

$model->{in1}->{tra1}->{data}}的结构中,“in1”,“tra1”和“data”都表示不同哈希结构级别的特定键。

是。如果不是这种情况,则会出现错误。

  

$#($model->{in1}->{tra1}->{data}}是否代表数组?

不完全。它是数组中元素的数量(所以,是的,散列中的数据应该是一个数组)。

  

@cus = sort keys %cus;的目标是什么?

它接受哈希表%cus中的所有键,并按字母顺序将它们排序为新数组@cus

  

右侧的“cus”和左侧的“cus”是一样的吗?

没有。在Perl $cus中,@cus%cus是三个不同的变量。前缀表示类型。